Hallo.
ich habe eine Java-Applikation geschrieben. Nun möchte ich
gerne die CPU-Auslastung,di diese Applikation mit sich bringt
ermitteln. Brauche ich dafür JNI oder geht das auch irgendwie
anders?
Mit JNI und DLLs wäre mir das zu betriebssystemabhängig.
Verwendung soll diese Funktion unter UNIX- und
Windows-Betriebssystemen finden.
Die Bestimmung der Systemlast ist betriebssystemabhängig
und Java bietet bisher keine Standard-API zur Abfrage an.
Wenn Du also kein JNI verwenden möchtest, bleibt im Allgemeinen nur
der Weg, die vom Betriebssystem abgebotenen Programme zur Abfrage
der Systemlast per Java über Runtime.getRuntime().exec() auszuführen
und deren Ausgabe zu parsen.
In Linux würdest Du Dir also einen geeigneten ps-Befehl erstellen
oder Du untersuchst das /proc-Dateisystem über die Java-Datei-API.
Die ganze Implementierung versteckst Du dann hinter einem Java-Interface
und lässt eine Factory zur Laufzeit die korrekte Implementierungsklasse
zurückgeben.
Lösungsskizze:
public interface ICpuLoad {
public float getCpuLoadOfPid(int iPid);
}
public class LinuxCpuLoad implements iCpuLoad {
public float getCpuLoadOfPid(int iPid) {
Process ps = Runtime.getRuntime().exec("ps");
// TODO: ps-Ausgabe parsen und load zurückgeben
}
}
public class CpuLoadFactory {
public static ICpuLoad getCpuLoad() {
ICpuLoad cpuLoad = null;
String sOs = System.getProperty("os.name");
if (sOs.matches(".\*Linux.\*$") {
return new LinuxCpuLoad();
} else {
throw new RuntimeException("OS " + sOs + " is currently not supported!");
}
return cpuLoad;
}
Doku:
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Ru…
Gruß,
-Andreas.