Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Zurzeit mache ich ein kleines Monitoring-Programm in Java. Jetzt möchte ich gerne die RAM-Auslastung eines durch Runtime.getRuntime().exec("java -jar test.jar"); gestarteten Prozesses. Ich weiß das man das mit Runtime.getFreeMemory(); und so machen kann, jedoch wie kann man auf die Runtime eines Java-Prozesses zugreift?
So, ich hab nun noch etwas gegoogelt und habe herausgefunden das ich mit der ManagementFactory und ein paar Tricks die CPU-Auslastung ausrechnen kann. Funktioniert ganz gut. Jedoch wie kann ich auf die ManagemnetFactory eines Java Prozesses ,den ich gestartet und als Variable
Hier ist der Code mit dem ich es berechne (Er ist nicht von mir, finde den Link aber nicht!):
Java:
import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
public class PerformanceMonitor {
private static int availableProcessors = ManagementFactory.getOperatingSystemMXBean().getAvailableProcessors();
private static long lastSystemTime = 0;
private static long lastProcessCpuTime = 0;
public static synchronized double getCpuUsage() {
if (lastSystemTime == 0) {
baselineCounters();
return 0;
}
OperatingSystemMXBean osm = ManagementFactory.getOperatingSystemMXBean();
long systemTime = System.nanoTime();
long processCpuTime = 0;
if (osm instanceof OperatingSystemMXBean) {
processCpuTime = ((com.sun.management.OperatingSystemMXBean) osm).getProcessCpuTime();
}
double cpuUsage = (double) (processCpuTime - lastProcessCpuTime) / (systemTime - lastSystemTime);
lastSystemTime = systemTime;
lastProcessCpuTime = processCpuTime;
return cpuUsage / availableProcessors;
}
private static void baselineCounters() {
lastSystemTime = System.nanoTime();
OperatingSystemMXBean osm = ManagementFactory.getOperatingSystemMXBean();
if (osm instanceof OperatingSystemMXBean) {
lastProcessCpuTime = ((com.sun.management.OperatingSystemMXBean) osm).getProcessCpuTime();
}
}
}
Falls du Eclipse verwendest, musst du höchstwahrscheinlich die JRE-Library unter Preferences neu hinzufügen (also löschen und neu dazu machen), da du sonst dauernd einen "access restriction"-Error kriegst.
Ich habe das mal mit dem Taskmanager nebenan überprüft und der CPU-Wert war immer ungefähr der selbe.