Pobieranie danych o procesie ram i cpu.

0

Witam!

Uruchamiam proces w mojej aplikacji Java.

Process runtime = Runtime.getRuntime().exec("java -Xmx"+args[4]+"M -Xms64M -jar craftbukkit-dev.jar -p "+args[3]+" -s "+args[5] , null, new File("/home/craftfield/"+args[2]));

Potem pobieram PID (linux) i chce sprawdzić obciążenie cpu i ram tą aplikacjią>

Field f = process.getClass().getDeclaredField("pid");
				f.setAccessible(true);
				int pid = f.getInt(process);
				String exec = "top -b -n 1 -p "+pid+" | awk 'NR>7 && NR<9 {printf $9}'";
				Process top = Runtime.getRuntime().exec(exec);
				BufferedReader in = new BufferedReader(new InputStreamReader(top.getInputStream()));
				String line = in.readLine();
				System.out.println(line);

Jednak Program zwraca null. W konsoli polecenie top -b -n 1 -p "+pid+" | awk 'NR>7 && NR<9 {printf $9}' działa. Tak samo jak w javie działa

String exec = "top -b -n 1 -p "+pid;
Process top = Runtime.getRuntime().exec(exec);

Jest jakiś lepszy sposób pobierania informacji o obciążeniu cpu i ram?

Idealnie by było gdyby istniała taka funkcja:

int cpu = process.getCPU();

0

ManagementFactory.getThreadMXBean() i ManagementFactory.getMemoryMXBean()
Bardzo wartosciowe informacje mozna uzyskac z kernela za pomoca getrusage().

0

Czy tymi funkcjami będę mógł pobrać informacje o cpu i ram konkretnego procesu ?
Pobawię się z tym jutro. I napiszę co wyszło.

PS. Jutro matura z infy w Javie trzymajcie kciuki Panowie !

1 użytkowników online, w tym zalogowanych: 0, gości: 1