Makale 14: Remoting Uygulamalarının “Performance Counter”lar ile İzlenmesi

.NET içerisinde bulundurduğu hazır class’lar sayesinde uygulamanızın Windows Performans Monitor ile son derece kolay bir şekilde etkileşim kurabilmesini sağlamaktadır.

Performans Monitor, Control Panel içerisinde bulunan “Administrative Tools” klasörü içinde “Performance” isimli shortcut’a tıklayarak ulaşılır ve ilk açıldığında aşağıdaki görüntüye sahiptir.

Performans Monitor üzerinde yeni bir monitör ekranı açmak istendiğinde “New Counter Set” butonuna tıklanır.

Yeni counter set’inde hiçbir counter bulunmaz. Bu boş counter set’ine yeni performance counter’ları eklemek için “Add” butonuna tıklanır.

Açılan ekranda “Performance object” seçeneği ile ne tip bir performance counter ekleneceği seçilir. .NET ile ilgili performance object’leri ekran görüntüsünde de görüldüğü gibi şu şekildedir:

Add Counters ekranında “Explain” butonuna tıklanarak performance counter hakkında detaylı bilgi alınır:

Instance seçim bölümünde uygulama seçilerek “Add” butonuna tıklanır:

Performance counter eklendikten sonra “Add Counters” ekranı başka performance counter’ların ekleneceği düşünülere kapatılmaz. Kapatılmak istendiğinde “Close” butonuna tıklanır. “Close” butonuna tıklandıktan sonra geri dönülen ekranda bulunan performance counter listesinde eklenmiş olan counter bulunur.

Bu işlemleri yaptıktan sonra seçmiş olunan uygulamaya bağlanacak olan Remoting client’ı run edilir ve ekrandaki değerler gözlemlenir.

Uygulama tekrar çalıştırıldığında değerler kaldığı yerden tekrar artacaktır.

.NET Framework’ün System.Diagnostics namespace’i altında bulunan PerformanceCounter class’ı Performance Monitor uygulamasının ekranda grafiksel olarak gösterdiği bilgilere, uygulamanın programmatic olarak erişebilmesini sağlar. Bu sayede yazılımcılar kendilerine özel performance monitor uygulamaları geliştirebilirler ve ihtiyaçlarına özel raporlar oluşturabilirler.

Daha önceden geliştirmiş olduğumuz MyFirstRemotingService project’i içerisinde bulunan MyRemotableType class’ını aşağıdaki şekilde değiştirerek, uygulamanın RequestCount method’u içerisinde PerformanceCounter class’ını kullanarak aldığı bilgiyi döndürmesini sağlayabiliriz.

MyRemotableType.cs

using System;
using MyFirstRemotableType;
using System.Diagnostics;
namespace MyFirstWindowsService
{
    public class MyRemotableType : MarshalByRefObject, IMyRemotableType
    {
        PerformanceCounter perfCounter;

        public MyRemotableType()
        {
            perfCounter = new PerformanceCounter();
            perfCounter.CategoryName = ".NET CLR Remoting";
            perfCounter.CounterName = "Total Remote Calls";
            perfCounter.InstanceName = "MyFirstWindowsService";
            perfCounter.MachineName = Environment.MachineName;
        }

        public DateTime GetServerDateTime()
        {
            return System.DateTime.Now;
        }

        public int RequestCount()
        {
            return Convert.ToInt32(perfCounter.NextValue());
        }
    }
}

PerformansCounter class’ının CategoryName özelliği Performance Monitor uygulamasına counter eklerken seçtiğimiz “Performance object” seçeneğine denk gelmektedir. Bu özelliğe “Add Counters” ekranında görmüş olduğunuz herhangi bir değeri string olarak atayabilirsiniz.

PerformansCounter class’ının CounterName özelliği “Add Counters” ekranındaki “Counter” seçeneğine denk gelmektedir. Bu özelliğe “Add Counters” ekranında, “Counters” bölümünde görmüş olduğunuz herhangi bir değeri string olarak atayabilirsiniz.

PerformansCounter class’ının InstanceName özelliği “Add Counters” ekranındaki “Instance” seçeneğine denk gelmektedir ve instance listesinde bulunan uygulamalardan hangilerinin bu counter ile ölçüleceğini belirlemek için kullanılır. Bu özelliğe “Add Counters” ekranında, “Instances” bölümünde görmüş olduğunuz herhangi bir değeri string olarak atayabilirsiniz.

PerformansCounter class’ının MachineName özelliği Performance Monitor uygulamasına counter eklerken seçtiğimiz “Counter” seçeneğine denk gelmektedir. System namespace’inde bulunan Environment class’ının sahip olduğu static access-modifier’ına sahip MachineName özelliği uygulamanın üzerinde çalıştığı bilgisayarın ismini verdiğinden, sabit değer verilmek istenmemesi durumunda bu özelliğin atanması mümkündür.

PerformansCounter class’ının NextValue method’u counter’ın üzerinde gerekli hesaplamaları yaparak hesaplanan değeri geri döndürür.

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.