Microsoft Exchange Server ‘in sağlıklı çalışması ve istenilen performans da hizmet verebilmesi için bir çok bileşene ihtiyacı bulunmaktadır ve Microsoft Exchange Server için .NET Framework bileşeni de zorunlu bir gereksinimdir. Microsoft Exchange Server ‘in çalışmış olduğu Windows Server işletim sistemi üzerine yüklenen .NET Framework uygulamasının sahip olduğu .NET Framework Counters sayıları Microsoft Exchange Server ‘in performasına bire-bir etki etmektedir.

Microsoft Exchange Server .NET Framework Counters makalesi içinde aşağıda ki performans değerlerine odaklanacağız.

  • .NET CLR Memory(*)\% Time in GC
  • .NET CLR Exceptions(*)\# of Exceps Thrown / sec
  • .NET CLR Memory(*)\# Bytes in all Heaps

1. NET Framework Counters Nedir?

.NET Framework alt yapısı benim için Exchange Server Kurulum işlemlerinin başarılı bir şekilde tamamlanması ve çalışmış olduğu süre içinde sağlıklı bir şekilde hizmet vermesi için zorunlu bir uygulamadır. .NET Framework alt yapısı arka tarafta ne yapar diye sorarsanız benim verecek olduğum cevap, Exchange Server ‘in kullanmış olduğu IIS alt yapısında ki düzenlemeleri yapan, performans sayaçlarını iyileştiren bir yazılım diyebilirim.

NET Framework Counters Nedir sorusu için daha fazla cevap beklentiniz varsa bu soryu devoloper kökenli arkadaşlara yönlendirmekte ve Vikipedi üzerinde ki aşağıda ki açıklamayı da buraya bırakmaktayım.

.NET Framework, Microsoft tarafından geliştirilen, açık İnternet protokolleri ve standartları üzerine kurulmuş bir “uygulama” geliştirme platformu. Daha önce Sun Microsystems tarafından geliştirilmiş olan Java platformuna önemli benzerlikler göstermektedir.

Buradaki uygulama kavramının kapsamı çok geniştir. Bir masaüstü uygulamasından bir web tarayıcı uygulamasına kadar her şey bu platform içinde düşünülmüştür ve desteklenmiştir. Bu uygulamaların birbirleriyle ve geliştirildiği ortam farketmeksizin dünyadaki tüm uygulamalarla iletişimi için kolayca web servisleri oluşturulmasına imkân verilmiştir. Bu platform, işletim sisteminden ve donanımdan daha üst seviyede taşınabilir olarak tasarlanmıştır.

2. Exchange Server ve Microsoft .NET Framework Versions

Microsoft Exchange Server Kurulum işlemlerine başlamadan önce kurulacak olduğu windows Server üzerinde bir takım ön koşullar vardır. Microsoft Exchange Server ‘in her bir sürümü Windows Server ‘in her bir sürümüne yüklenemez. Örnek olarak Exchange Server 2016 sürümünü ve Exchange Server 2016 ‘ın sahip olduğu hiç bir Cumulative Update sürümünü Windows Server 2019 üzerinde çalıştıramayız. Aynı durum Microsoft Exchange Server 2019 içinde geçerli olup Exchange Server 2019 ve onun sahip olduğu hiç bir Cumulative Update sürümünü Windows Server 2016 üzerinde çalıştıramayız.

Microsoft Exchange Server 2010, Exchange Server 2013 için Windows Server işletim sistemi esnekliği bulunuyor olsa bile Exchange Server 2016 ve Exchange Server 2019 için bu gibi sınırlamalar gelmiştir.

2.1 Microsoft .NET Framework Versions ve Exchange Server Versions

Microsoft Exchange Server ‘in Windows Server için zorunlu tutmuş olduğu bu ön koşullar NET Framework Versions ‘ları için de geçerli durumdadır. Her bir Exchange Server sürümü bütün Microsoft .NET Framework Versions ‘ları ile uyumlu çalışmamaktadır.

Microsoft Exchange Server Upgrade projelerinde yada Exchange Server Cumulative Update Güncelleme işlemlerinde Microsoft .NET Framework Versions ‘ları önemlidir. Exchange Server Security Update paketlerinde bu zorunluluk bulunmamaktadır.

2.2 Exchange Server Supported .NET Framework version

.NET Framework 4.8 sürümü Microsoft Exchange Server 2019 RTM ve CU1 sürümünde desteklenmezken CU2 ‘den sonra ki yeni Cumulative Update sürümlerinde desteklenmektedir. .NET Framework 4.7.2 sürümü ve öncesinde ki hiç bir sürüm de Exchange Server 2019 üzerinde desteklenmemektedir.

Aşağıda paylaşmış olduğum tabloda hangi Exchange Server ‘in hangi Cumulative Update sürümü ile hangi .NET Framework version ile uyumlu çalıştığının tablosu bulunmaktadır.

Exchange Server 2019 .NET Framework version

Exchange Server 2019 .NET Framework version

Exchange Server 2016 .NET Framework version

Exchange Server 2016 .NET Framework version

Exchange Server 2013 .NET Framework version

Exchange Server 2013 .NET Framework version

Exchange Server Kurulum işlemlerinde önce yada Exchange Server Cumulative Update güncelleme işlemlerinden önce Exchange Server supportability matrix dökümanını incelemenizi ve sonrasında Exchange Server Kurulum işlemlerine yada Cumulative Update güncelleme işlemlerine başlamanız gerekmektedir.

3. Exchange Server .NET Framework Counters

Microsoft Exchange Server ‘in kullanmış olduğu .NET Framework Counters değerleri aşağıda listelenmiştir.

  • .NET CLR Memory(*)\% Time in GC: Garbage Collection durumunun ne zaman gerçekleştiğini gösterir. Sayaç eşiği aştığında, CPU’nun temizlendiğini ve yükleme için verimli kullanılmadığını gösterir. Sunucuya bellek eklemek bu durumu iyileştirecektir. Bu değer ortalama %10’un altında olmalıdır.
  • .NET CLR Exceptions(*)\# of Exceps Thrown / sec: Saniyede atılan istisnaların sayısını görüntüler. Bunlar, hem .NET Framework istisnalarını hem de .NET Framework istisnalarına dönüştürülen yönetilmeyen istisnaları içerir. Örneğin, yönetilmeyen koddaki boş gösterici başvurusu istisnası, yönetilen kodda bir .NET Framework System.NullReferenceException olarak yeniden oluşturulur. Bu sayaç, hem işlenen hem de işlenmeyen istisnaları içerir. Saniyedeki toplam isteklerin (RPS) %5’inden az olmalıdır (Web Sunucusu(_Toplam)\Bağlantı Denemesi/sn * .05).
  • .NET CLR Memory(*)\# Bytes in all Heaps: Diğer dört sayacın toplamını gösterir: Gen 0 Yığın Boyutu, Gen 1 Yığın Boyutu, Gen 2 Yığın Boyutu ve Büyük Nesne Yığın Boyutu. Bu sayaç, GC Yığınlarında bayt olarak ayrılan geçerli belleği gösterir. Bytes in all Heaps değerleri Exchange Server ‘in sahip olduğu kaynak değerlerine bağlı olarak belirlenir ve tek düzey bir sayacı bulunmamaktadır.

4. Azure Monitor ile Microsoft Exchange Server Microsoft .NET Framework Counters İzleme

Microsoft Exchange Server .NET Framework Counters değerlerinin tespitini #Azure Monitor ile yapılabilmekteyiz. Azure Monitor ile bu değerleri incelemek için bir takım ön gereksinimler vardır ve bu ön gereksinimleri sırası ile aşağıda paylaşmaktayım.

  1. Azure Log Analytics Workspace Oluşturma işleminin Azure Tenant üzerinde yapılmış olması gerekmekte.
  2. Oluşturulan Azure Log Analytics Workspace üzerinde Azure Log Analytics Workspace Agents Configuration işlemlerinin tamamlanmış olması ve Azure Log Analytics Advanced settings bölümünde Exchange Server Memory Counters değerlerinin tanımlanması gerekmektedir. Bunlar özel sorgular olduğu için bu sorguları istediğimizi Azure Monitor aracına öğretmemiz gerekmektedir.
  3. Exchange Server Organizasyonu içinde bulunan her bir Microsoft Exchange Server üzerine ve Exchange Server ‘in kullanmış olduğu sunuculara Azure Monitoring Agent Kurulum Adımları ‘nın tamamlanmış olması gerekmekte.
  4. Exchange Server Organizasyonu içinde bulunan her bir Microsoft Exchange Server üzerinde Exchange Server Diagnostics ve Health Manager Mimarisi ‘nin yapılandırılmış olması gerekmekte.
  5. Azure Monitor ile talep edilen sorguların sağlıklı olması için Exchange Server Daily Performance Logs Dizini Değiştirme işlemlerinin tamamlanmış olması gerekmekte.
  6. Azure Monitor ile talep edilen sorguların var olması dolayısı ile Exchange Server Log ve ETL Files Temizleme işleminin sorgu zamanları için hazır olması gerekmekte.

Yukarıda paylaşılan 6 temel gereksinim tamamlandıktan sonra Azure Monitor ile Exchange Server Processor and Process Counters değerlerini sorgulayabiliriz. Azure Monitor sorgu sonuçlarının sağlıklı oluşması için Windows Server Performans ve Virtual Memory ayarlarının da yapılmış olması önerilmektedir. Virtual Memory ve Page File ayarları Windows Server ‘in daha performanslı çalışmasını sağlayacak olan ince ayarlardır.

5. Azure Monitor ile Exchange Server .NET Framework Counters Query

Azure Monitor için paylaşmış olduğum aşağıda ki Azure Monitor Exchange Server .NET Framework Counters Query sorguları son 24 saat içinde ki sorguları her 30 Dakikalık aralıklarla çalıştırmak üzere paylaşılmıştır.

Her bir sorgu, izlenmekte olan Exchange Server üzerinde ki  .NET Framework kaynak tüketimi ve bu kaynakları hangi Exchange Servisi, uygulaması yada işlemin izlediğini belirlemek için kullanılmaktadır.

Bu sorguları ihtiyaçlarınız çerçevesinde özelleştirebilirsiniz.

5.1 Microsoft Exchange NET CLR Memory Garbage Collection Time (InstanceName) Azure Monitor Query

Aşağıda paylaşmış olduğum Azure Monitor Query ile Microsoft Exchange Server ‘ların son 24 Saat içinde NET CLR Memory Garbage Collection Time temizleme işleminin hangi Exchange Servisi tarafından ne zaman yapıldığını görebilmekteyiz.

Copy to Clipboard
Microsoft Exchange NET CLR Memory Garbage Collection Time (InstanceName)

Microsoft Exchange NET CLR Memory Garbage Collection Time (InstanceName)

Microsoft Exchange NET CLR Memory Garbage Collection Time değerlerinin %10 ‘dan fazla olması önerilmemektedir ve yukarıda görüldüğü gibi bazı servislerin eşik değeri %10 üzerinde seyir etmektedir. Instance Name sorgularını doğru yorumlaya bilmek için her bir exchange Server üzerinde Garbage Collection Time sorgularının da incelenmesi ve bu değerler de %10 üzerinde seyir eden bir kullanım var sa Exchange Server ‘lara bellek artışının yapılması gerekmektedir.

5.2 Microsoft Exchange NET CLR Memory Garbage Collection Time (Computer) Azure Monitor Query

Aşağıda paylaşmış olduğum Azure Monitor Query ile Microsoft Exchange Server ‘ların son 24 Saat içinde NET CLR Memory Garbage Collection Time temizleme işleminin hangi Exchange Server tarafından ne zaman yapıldığını görebilmekteyiz.

Copy to Clipboard
Microsoft Exchange NET CLR Memory Garbage Collection Time (Computer) Azure Monitor Query

Microsoft Exchange NET CLR Memory Garbage Collection Time (Computer) Azure Monitor Query

5.3 Microsoft Exchange NET CLR Memory NullReferenceException (InstanceName) Azure Monitor Query

Aşağıda paylaşmış olduğum Azure Monitor Query ile Microsoft Exchange Server ‘ların son 24 Saat içinde NullReferenceException Time temizleme işleminin hangi Exchange Servisi tarafından ne zaman yapıldığını görebilmekteyiz.

Copy to Clipboard
Microsoft Exchange NET CLR Memory NullReferenceException (InstanceName) Azure Monitor Query

Microsoft Exchange NET CLR Memory NullReferenceException (InstanceName) Azure Monitor Query

5.4 Microsoft Exchange NET CLR Memory NullReferenceException (Computer) Azure Monitor Query

Aşağıda paylaşmış olduğum Azure Monitor Query ile Microsoft Exchange Server ‘ların son 24 Saat içinde NullReferenceException Time temizleme işleminin hangi Exchange Server tarafından ne zaman yapıldığını görebilmekteyiz.

Copy to Clipboard
Microsoft Exchange NET CLR Memory NullReferenceException (Computer) Azure Monitor Query

Microsoft Exchange NET CLR Memory NullReferenceException (Computer) Azure Monitor Query

5.5 Microsoft Exchange NET CLR Memory Bytes in all Heapsize (InstanceName) Azure Monitor Query

Aşağıda paylaşmış olduğum Azure Monitor Query ile Microsoft Exchange Server ‘ların son 24 Saat içinde Bytes in all Heapsize işleminin hangi Exchange Servisi tarafından ne zaman yapıldığını görebilmekteyiz.

Copy to Clipboard
Microsoft Exchange NET CLR Memory Bytes in all Heapsize (InstanceName) Azure Monitor Query

Microsoft Exchange NET CLR Memory Bytes in all Heapsize (InstanceName) Azure Monitor Query

Heapsize değeri için herhangi bir referans eşiği bulunmamaktadır. Azure Monitıor Query sorgularının tek düzey olması beklenmektedir.

5.6 Microsoft Exchange NET CLR Memory Bytes in all Heapsize (Computer) Azure Monitor Query

Aşağıda paylaşmış olduğum Azure Monitor Query ile Microsoft Exchange Server ‘ların son 24 Saat içinde Bytes in all Heapsize işleminin hangi Exchange Server tarafından ne zaman yapıldığını görebilmekteyiz.

Copy to Clipboard
Microsoft Exchange NET CLR Memory Bytes in all Heapsize (Computer) Azure Monitor Query

Microsoft Exchange NET CLR Memory Bytes in all Heapsize (Computer) Azure Monitor Query

Heapsize değeri için herhangi bir referans eşiği bulunmamaktadır. Azure Monitıor Query sorgularının tek düzey olması beklenmektedir.

Bu makale içinde paylaşmış olduğumuz .NET Framework performans counters değerleri Microsoft Exchange Server özelinde kullanılan .NET Framework counters ‘dır.

Microsoft .NET Framework mimarisi Exchange Server haricinde bir çok platform tarafından da kullanılmakta olup .NET Framework ‘in sahip olduğu bütün performans sayaç bilgisini Performance counters in .NET Framework adresinden öğrenebilirsiniz.