CPU-Auslastung durch Applikation ermitteln

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.

Vielen Dank im Voraus.

MfG

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.

Okay,

vielen Dank für die Antwort. Wie schaut es denn mit dem Dateisystem aus? In Java 6 kann man die Größe des Dateisystems abfragen, was mit Java 4 noch nicht funktionierte.
Allerdings möchte ich Java 4 dazu verwenden. Kann ich vielleicht den Sourcecode, der das Dateisystem abfragt übernehmen, wie er ist oder brauche ich wirklich Java 6 dafür?

Danke und Gruß

Hallo m^5.

Wie schaut es denn mit dem
Dateisystem aus? In Java 6 kann man die Größe des Dateisystems
abfragen, was mit Java 4 noch nicht funktionierte.
Allerdings möchte ich Java 4 dazu verwenden. Kann ich
vielleicht den Sourcecode, der das Dateisystem abfragt
übernehmen, wie er ist oder brauche ich wirklich Java 6 dafür?

Den Java6-Code wirst Du nicht in JRE1.4 nutzen können, so
wie mir mein kurzer Blick in die Java6-Sourcen verrät.

Es gibt aber eine fertige API dafür im Apache Commons IO Projekt:
http://jakarta.apache.org/commons/io/

Die von Dir gewünschte Klasse ist FileSystemUtils, siehe
http://jakarta.apache.org/commons/io/api-release/org…

Gruß,
-Andreas.