2016-04-15 2 views
6

Нужно api получить CPU & использование памяти моего текущего процесса или приложения в java. я получил API, чтобы получить использование центрального процессора полной системы, но мне нужно для конкретного процесса. (getSystemCpuLoad из OperatingSystemMXBean интерфейса)Java api для получения Cpu и использования памяти моего приложения java

Заранее спасибо

+4

Это зависит от того, что вы подразумеваете под использование памяти; вы имеете в виду резидентную память, виртуальную память, кучу в использовании, живые объекты, это могут быть разные. –

+0

Я имею в виду кучу в использовании. –

+0

Это можно получить с помощью Runtime. totalMemory() - freeMemory() Обратите внимание, что это не дает вам большой идеи о том, насколько полна куча, только как далеко вы находитесь от следующего полного GC. –

ответ

4

Существует хорошая новость и плохая новость. Плохая новость заключается в том, что программный запрос на использование ЦП невозможно с использованием чистой Java. Для этого просто нет API. Рекомендуемая альтернатива может использовать Runtime.exec() для определения идентификатора процесса JVM (PID), вызова внешней, определенной для платформы команды, например ps, и анализировать ее вывод для интересующего PID. Но этот подход в лучшем случае является хрупким.

Хорошей новостью является то, что надежное решение может быть выполнено путем выхода за пределы Java и написания нескольких строк кода C, которые интегрируются с Java-приложением через Java Native Interface (JNI).

+0

Если я хочу, я могу помочь вам в этом. –

4

Вы можете получить эти данные, если используете другой OperatingSystemMXBean. Проверьте импортированный пакет: com.sun.management.OperatingSystemMXBean.

import java.lang.management.ManagementFactory; 
import com.sun.management.OperatingSystemMXBean; 

public class Test { 

public static void main(String[] args) { 
     OperatingSystemMXBean operatingSystemMXBean = 
      (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean(); 
     System.out.println(operatingSystemMXBean.getProcessCpuLoad()); 
}} 

https://docs.oracle.com/javase/7/docs/jre/api/management/extension/com/sun/management/OperatingSystemMXBean.html

Если я не ошибаюсь, этот класс включен в rt.jar, присутствует в вашем Java Runtime.

+0

Дает ошибку компиляции: метод getProcessCpuLoad() не определен для типа OperatingSystemMXBean. –

+0

@PSM Проверьте импорт. Вы уверены, что импортируете com.sun.management.OperatingSystemMXBean? – RubioRic

+0

@PSM Я думаю, что вы все еще используете java.lang.management.OperatingSystemMXBean – RubioRic

 Смежные вопросы

  • Нет связанных вопросов^_^