.NET/İşlem performans sayaçlarını kullanarak bir web sayfasında bazı bellek istatistiklerini (çalışma kümesi, GC'ler vb.) Görüntülemek istiyorum. Ne yazık ki, bu sunucuda birden çok uygulama havuzu varsa, bunlar bir indeks (# 1, # 2 vb.) Kullanılarak ayırt edilirler ancak bir #. Indeksine (sahip olduğum) bir işlem kimliğini nasıl eşleştireceğimi bilmiyorum. Programlı bir yol var mı (bir ASP.NET web sayfasından)?Performans Sayaç Örnek Adını (w3wp # XX) ASP.NET çalışan işlem kimliğinden edin.
cevap
Google'da ilk hit:
birden ASP.NET alt işler
Multiple CLR performance counters appear that have names that resemble "W3wp#1" çalıştıran, ortak dil çalışma zamanı (CLR) performans sayaçlarını benzer adlara sahip olacak "W3wp # 1 "veya " W3sp # 2 "vb. Bu, .NET CLR Bellek performans nesnesinde İşlem Kimliği adlı bir sayacı dahil etmek için .NET Framework 2.0'da düzeltildi. Bu sayaç, örneğinin işlem kimliğini görüntüler. Bu sayacı, bir işlemle ilişkili olan CLR performans sayacını belirlemek için kullanabilirsiniz.
Varsayılan olarak, Performans İzleyicisi (Perfmon.msc) ekranda birden çok yolla aşağıdaki süreçleri numaralandırılırken tarafından aynı ada sahip süreçler:
Ayrıca KB 281884
İşlem # 1 İşlem # 2 İşlem # 3
Performans Monitörü ayrıcagörüntüleyebilirşekilde aşağıdaki adla işlem kimliğini (PID) ekleyerek bu süreçler:
Process_PID
Aslında doğru değil - adlandırma İşlem, İşlem # 1, İşlem # 2 gibi görünüyor. İçerde postfix dışında bir tane var. –
private static string GetProcessInstanceName(int pid)
{
PerformanceCounterCategory cat = new PerformanceCounterCategory("Process");
string[] instances = cat.GetInstanceNames();
foreach (string instance in instances)
{
using (PerformanceCounter cnt = new PerformanceCounter("Process",
"ID Process", instance, true))
{
int val = (int) cnt.RawValue;
if (val == pid)
{
return instance;
}
}
}
throw new Exception("Could not find performance counter " +
"instance name for current process. This is truly strange ...");
}
Daha hızlı olduğunu düşünüyorum: Process p = Process.tGetProcessById (pid); string instance = Process.ProcessName; – pistacchio
, http://weblogs.thinktecture.com/ingo/2004/06/getting-the-current-process-your-own-cpu-usage.html –
@pistacchio No'dan kopyalanmıştır, eğer varsa, bu size yanlış bir değer verir. Sürecin birden fazla örneği. –
chiru tarafından örnek, belirli bir durumda çalışmıyor - Sahip Aynı programın iki sürümü, aynı isimli ve bir .net değil ve .net sürümü, non -.net sürümünden sonra başlar. .Net sürümü, uygulama # 1 olarak adlandırılacaktır, ancak bu adı kullanarak CLR perf sayaçlarına eriştiğinizde, sayaçtaki örnek adlarının # 1 ile aynı ismi vardır, böylece hatalar oluşur.
Nick.
Kayıt defteri ayarlarının değiştirilmesi oldukça kolay gözükse de, maalesef çoğumuz sunucuda yapma hakkımız yok (ya da ona dokunmak istemiyoruz!). Bu durumda, küçük bir çözüm var. Bu here hakkında blog yazdım.
Daha önce yanıtlandığını biliyorum, ancak tam çalışma kodu uğruna bu çözümü gönderiyorum.Eğer birine uygunluk yukarıdaki yöntemleri kullanın aynı sürecin birden çok örneği toplam bellek almak istiyorsanız,
public static long GetProcessPrivateWorkingSet64Size(int process_id)
{
long process_size = 0;
Process process = Process.GetProcessById(process_id);
if (process == null) return process_size;
string instanceName = GetProcessInstanceName(process.Id);
var counter = new PerformanceCounter("Process", "Working Set - Private", instanceName, true);
process_size = Convert.ToInt32(counter.NextValue())/1024;
return process_size;
}
public static string GetProcessInstanceName(int process_id)
{
PerformanceCounterCategory cat = new PerformanceCounterCategory("Process");
string[] instances = cat.GetInstanceNames();
foreach (string instance in instances)
{
using (PerformanceCounter cnt = new PerformanceCounter("Process", "ID Process", instance, true))
{
int val = (int)cnt.RawValue;
if (val == process_id)
return instance;
}
}
throw new Exception("Could not find performance counter ");
}
Ayrıca: Bu zincirdeki M4N tarafından sunulan yöntemine dayalı bu kodu unutmayın
public static long GetPrivateWorkingSetForAllProcesses(string ProcessName)
{
long totalMem = 0;
Process[] process = Process.GetProcessesByName(ProcessName);
foreach (Process proc in process)
{
long memsize = GetProcessPrivateWorkingSet64Size(proc.Id);
totalMem += memsize;
}
return totalMem;
}
- 1. .net performans sayacı - İşlem (w3wp) \% işlemci zaman performans testi sırasında
- 2. VHDL: işlem ve sayaç çalışmıyor
- 3. Pencere tanıtıcısını, çalışan işlem adını vererek nasıl edinebilirim?
- 4. Python betiğinin işlem adını değiştirme
- 5. -XX: MinHeapFreeRatio ve -XX: MaxHeapFreeRatio
- 6. C# içindeki işlem adını değiştir?
- 7. Denetleyicinin İşlem adını Görüntüle Görünüm
- 8. IIS7 için çalışan işlem nedir?
- 9. İstenen Performans Sayacı özel bir sayaç değil, ReadOnly
- 10. JVM seçenek XX: UseFastEmptyMethods/XX: UseFastAccessorMethods
- 11. "Bu işlem, ASP.NET MVC2
- 12. Yansıma kimliğinden şube nasıl bulunur?
- 13. ASP.NET örnek web sitesi?
- 14. Performans Sayacı, İşlem Kimliği yerine ad?
- 15. Şu an çalışan MLM adını Arden uygula
- 16. Karıncalar performans profiler asp.net-mvc sitesine bağlanmadı
- 17. Performans testi için jium'u jium'a entegre edin?
- 18. w3wp otomatik olarak önceliği değiştirir
- 19. Sunucu makine adını ASP.NET MVC'de alın?
- 20. Erlang VM'nin işlem adını nasıl değiştiririm?
- 21. Linux'taki gerçek işlem adını değiştirin Linux'ta
- 22. ASP.NET MVC - Denetleyici kodundan şu andaki işlem?
- 23. işlem çalışan EXE saklanır hangi dizin bul
- 24. Bir işlem tanımının çalışan örneklerini nasıl sorgulanır?
- 25. Uzak bir makinede çalışan bir işlem mi?
- 26. eksik: Özellik kimliğinden sonra
- 27. -XX: -PrintGC ve XX: -PrintGCDetails bayrakları ne yapar?
- 28. XX için varsayılan: MaxDirectMemorySize
- 29. -XX: + PrintCompilation çıkışının anlaşılması
- 30. -XX: MaxPermSize ne yapar?
Bu senaryoyu ayrıntılı olarak ele alan bir blog yazısı: http://weblog.west-wind.com/posts/2014/Sep/27/Capturing-Performance-Counterüml-for-a-Process-by -Süreç-id. Temel olarak 'örnek isimlerini' almak için başka bir Performans Sayacını kullanmanız ve işlem sayaçlarınızı bu isimle çalıştırmanız gerekir. –