2016-03-04 65 views
8

Bugünkü deneyimlerimde, Oracle'ın Java VisualVM'sinin cpu kullanımını, izlenen JVM'nin işletim sisteminde sınırlı bir süreç yakınlığına sahip olsa bile, toplam makine çekirdeğinin yüzdesi olarak gösterdiğini görüyorum. Bu "monitör" sekmesinde. bu JVM izin işlemciler htop% 100 kullanımı yakın (Linux, Ubuntu) taskset ile izlenen JVM sınırlandırılmasıJava VisualVM CPU kullanımı ve işlemci yakınlığı

, visualvm gösterilen işlemci yüzdesi bölünmesiyle işlemciler toplam sayısı açık bir şekilde eşit olan İzlenen jvm'ye izin verilen işlemci sayısı. Bu nedenle ölçeğin çözünürlüğü bu nedenle yetersiz kalmaktadır.

Aynı şeyi diğer işletim sistemlerinde veya genel olarak gözlemlediğinizi doğrulayabilir misiniz?

Yalnızca cpu kullanımını gösterirken yalnızca benzeşim tarafından atanan çekirdekler için VisualVM hesabına sahip olmanın bir yolu var mı?

cevap

5

VisualVM source code göre, CPU kullanımı gerçekten işlemci sayısı bölü toplam CPU süresi şu şekilde hesaplanır:

OperatingSystemMXBean osbean = mxbeans.getOperatingSystemMXBean(); 
    if (osbean != null) processorsCount = osbean.getAvailableProcessors(); 

oluştu: processorsCountOperatingSystemMXBean elde edilir

long processCpuTime = tracksProcessCpuTime ? 
     model.getProcessCpuTime()/processorsCount : -1; 

Uzun süredir devam eden bir JVM hatası JDK-6515172, işlem afinitesinin dikkate alınmadığı, yani getAvailableProcessors, görev kümelerinden bağımsız olarak her zaman toplam CPU sayısını döndürdü. Bu Linux ve BSD'ye özgüdür; Solaris ve Windows üzerinde normal çalıştı.

Yaklaşık bir ay önce bu hata çözüldü. Düzeltme, yalnızca, JDK 9 içindir.

Olası geçici çözümler için this question'a bakın. Yine de çirkinler.