Verwenden der Sigar-API zum Abrufen der JVM-CPU-Auslastung

Ich verwende Sigar, um die CPU-Auslastung der aktuell ausgeführten JVM in einem Anwendungsserver abzurufen und für die Verlaufsansicht dieser Daten zu speichern, erhalte jedoch immer 0% CPU-Prozentsatz.

In der Zwischenzeit halte ich meine VisualVM offen, um die CPU-Auslastung zu überwachen, und sehe, wie sich die CPU in VisualVM in regelmäßigen Abständen ändert, während sie mit Sigar immer 0% meldet.

Hier ist der Code, den ich regelmäßig ausführe:

Sigar sigar = new Sigar();
ProcCpu cpu = null;
long pId = sigar.getPid(); // This one gives me the same process ID that I see in visualVM
try {
    cpu = sigar.getProcCpu(pId);

} 
catch (SigarException se) {
    se.printStackTrace();
}
System.out.print(cpu.getPercent());

Dieser Code gibt immer 0%.

Was mache ich in diesem Fall falsch? Wie kann ich Sigar dazu bringen, die CPU-Auslastung ähnlich wie in VisualVM anzuzeigen?

Ich habe versucht hinzuzufügen

cpu.gather(sigar, pId);

nach dem Aufruf von getProcCpu (pid) erhalte ich aber immer nur zwei Werte (0.0 und 9.08729312E-315), auch wenn ich die Last auf dem Server weiter erhöhe und verringere ...

Antworten auf die Frage(1)

Ihre Antwort auf die Frage