Java VisualVM CPU-Auslastung und Prozessoraffinität

8

In meiner heutigen Erfahrung finde ich heraus, dass Oracle Java VisualVM die CPU-Nutzung als Prozentsatz der gesamten Rechnerkerne anzeigt, selbst wenn die überwachte JVM eine begrenzte Prozessaffinität im Betriebssystem hat. Dies ist in der Registerkarte "Monitor".

Begrenzen der überwachten jvm mit taskset (auf Linux, Ubuntu), wenn die zu dieser jvm zugelassenen Prozessoren nahezu 100% Auslastung in htop haben, ist der in VisualVM angezeigte CPU-Prozentsatz eindeutig gleich der Gesamtanzahl von CPUs dividiert durch die Anzahl der erlaubten Prozessoren für den überwachten jvm. Die Auflösung der Skala ist daher für diesen Fall nicht ausreichend.

Können Sie bestätigen, dass Sie dasselbe auf anderen Betriebssystemen oder allgemein beobachtet haben?

Gibt es eine Möglichkeit, VisualVM-Konto nur für affinitätszugewiesene Kerne zu verwenden, wenn die CPU-Nutzung angezeigt wird?

    
matanster 04.03.2016, 17:14
quelle

1 Antwort

5

Nach VisualVM-Quellcode , die CPU-Auslastung wird tatsächlich als Gesamt-CPU-Zeit dividiert durch die Anzahl der Prozessoren berechnet:

%Vor%

wobei processorsCount von OperatingSystemMXBean erhalten wird:

%Vor%

Es gab einen langjährigen JVM-Fehler JDK-6515172 , dass die Prozessaffinität nicht übernommen wurde berücksichtigt, dh getAvailableProcessors gab immer die Gesamtanzahl der CPUs unabhängig von Tasksets zurück. Dies war spezifisch für Linux und BSD; hat normalerweise unter Solaris und Windows gearbeitet.

Vor ungefähr einem Monat wurde dieser Fehler endgültig gelöst. Das Update ist jedoch nur für JDK 9.

Sehen Sie sich diese Frage für mögliche Problemumgehungen. Sie sind jedoch etwas hässlich.

    
apangin 12.03.2016, 01:06
quelle

Tags und Links