Mit Sigar API JVM CPU Auslastung
Ich bin mit Sigar um die CPU-Auslastung der Laufenden JVM in einem Anwendungsserver und speichern Sie für eine historische Sicht auf diese Daten, aber ich bekomme immer 0% CPU-Prozentsatz.
In der Zwischenzeit, ich halte meine visualVM öffnen Sie überwachen die CPU-Auslastung, und ich sehe die CPU - % wechselt periodisch in visualVM, während es immer Berichte, die 0% mit Sigar.
Hier ist der code, den ich m laufen regelmäßig:
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 falsch, es diesem Fall? Wie bekomme ich Sigar zum anzeigen der CPU-Auslastung ähnlich der Verwendung angezeigt VisualVM?
Habe ich versucht, indem
cpu.gather(sigar, pId);
nach dem Aufruf getProcCpu(pid), aber ich bekomme immer nur zwei Werte (0.0 und 9.08729312 E-315), auch wenn ich immer Zunehmender und Abnehmender Last auf dem server...
InformationsquelleAutor Sammy | 2013-10-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es hängt davon ab, wie Sigar interpretiert verfügbaren Informationen. Zur Verfügung stehenden Informationen (CPU-Auslastung, Zeit) mit der Aktualisierung nicht sehr oft, und die
ProcCpu
ist nur eine sofortige Prozess die CPU-Auslastung, dass ist der Grund, warum die CPU-Auslastung für die meistenProcCpu
0 ist. Sie noch nie gesehen, aber für einigeProcCpu
dieser Wert sollte weit überlegen 100%.Konnte man die CPU-Auslastung für einen bestimmten Zeitraum, die Analyse von zwei
ProcCpu
s von der start-und die end-Momente, wobei die CPU-Auslastung und damit die Zeit derProcCpu
(lastTime) berücksichtigt. Aber denken Sie daran, dass die CPU-Auslastung Zeit-Wert-updates nicht sehr oft, so ist es möglich, dieselbe CPU-Auslastung Zeit fürProcCpu
s mehr als eine Sekunde auseinander. Um die tatsächliche CPU-Auslastung Informationen, die Sie sammeln müssen zwei oder mehrProcCpu
s.I ' V skizziert einen monitor, der Aggregate und updates Informationen zu CPU-Auslastung:
ProcCpu
— instant CPU-Auslastung durch Prozess-InformationencurPc.getTotal()
— Summe der Zeit, dass sich ein Prozess die CPUcurPc.getLastTime()
— moment für dieProcCpu
Informationen dar, dieload
) ist das Verhältnis der Zeit, die ein Prozess verwendet, der CPU während einer bestimmten Zeit (totalDelta
) und in diesem Zeitraum Dauer (timeDelta
).Während die CPU-Auslastung mal wieder updates nicht sehr oft, ich habe introdused einfache Heuristik, die annimmt, daß die Last ist die gleiche wie vorher, während die CPU-Auslastung die Zeit nicht aktualisieren. Aber angenommen, es könnte sich bei null-Last für einige Zeit, ich habe introdused eine Dauer (
TOTAL_TIME_UPDATE_LIMIT
), nach der die gleiche CPU-Auslastung Zeitwert legal, und es wird angenommen, dass der laden ist wirklich null.TOTAL_TIME_UPDATE_LIMIT
sollte mindestens 1 Sekunde?Nein. Es hängt davon ab, wie oft die Ziel-Parameter wirklich updates. Wenn Sie
TOTAL_TIME_UPDATE_LIMIT
zu niedrig ist, erhalten Sie so etwas wie die Funktion sah in der Ausgabe.wie kann ich wissen, wie oft Sie aktualisiert dann? Jetzt habe ich es auf 1 festlegen, und ich bin immer Werte über 0.
Diese Frage ist aus meiner competiotion...
Was meinst du mit, dass? Ich weiß nur nicht, was Sie meinen, wenn Sie sagen: "es hängt davon ab, wie der, den target-Parameter wirklich updates". Der Prozess-Daten meinst du? Wie kann ich den Wert dann? Wie hast du es funktioniert, wenn Sie nicht wissen, wie um es zu bekommen?
InformationsquelleAutor Timofey Gorshkov