получить системную информацию на уровне ОС - PullRequest
225 голосов
/ 25 августа 2008

В настоящее время я создаю Java-приложение, которое может работать на разных платформах, но в основном это варианты Solaris, Linux и Windows.

Кто-нибудь смог успешно извлечь информацию, такую ​​как текущее используемое дисковое пространство, загрузка ЦП и память, используемая в базовой ОС? Как насчет того, что потребляет само приложение Java?

Желательно, чтобы я получил эту информацию без использования JNI.

Ответы [ 15 ]

3 голосов
/ 03 марта 2016

Он все еще в разработке, но вы уже можете использовать jHardware

Это простая библиотека, которая удаляет системные данные, используя Java. Работает как в Linux, так и в Windows.

ProcessorInfo info = HardwareInfo.getProcessorInfo();
//Get named info
System.out.println("Cache size: " + info.getCacheSize());        
System.out.println("Family: " + info.getFamily());
System.out.println("Speed (Mhz): " + info.getMhz());
//[...]
2 голосов
/ 24 апреля 2019

Один простой способ, который можно использовать для получения информации об уровне ОС, и я протестировал на моем Mac, который хорошо работает:

 OperatingSystemMXBean osBean =
        (OperatingSystemMXBean)ManagementFactory.getOperatingSystemMXBean();
    return osBean.getProcessCpuLoad();

Здесь вы можете найти множество соответствующих метрик операционной системы здесь

2 голосов
/ 27 октября 2016

На Windows вы можете запустить команду systeminfo и получить ее вывод, например, с помощью следующего кода:

private static class WindowsSystemInformation
{
    static String get() throws IOException
    {
        Runtime runtime = Runtime.getRuntime();
        Process process = runtime.exec("systeminfo");
        BufferedReader systemInformationReader = new BufferedReader(new InputStreamReader(process.getInputStream()));

        StringBuilder stringBuilder = new StringBuilder();
        String line;

        while ((line = systemInformationReader.readLine()) != null)
        {
            stringBuilder.append(line);
            stringBuilder.append(System.lineSeparator());
        }

        return stringBuilder.toString().trim();
    }
}
2 голосов
/ 10 ноября 2011

Если вы используете виртуальную машину Jrockit, то здесь есть другой способ получения загрузки процессора виртуальной машины. Компонент времени выполнения также может дать вам нагрузку на процессор на процессор. Я использовал это только в Red Hat Linux для наблюдения за производительностью Tomcat. Вы должны включить JMX remote в catalina.sh, чтобы это работало.

JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://my.tomcat.host:8080/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);     
MBeanServerConnection conn = jmxc.getMBeanServerConnection();       
ObjectName name = new ObjectName("oracle.jrockit.management:type=Runtime");
Double jvmCpuLoad =(Double)conn.getAttribute(name, "VMGeneratedCPULoad");
1 голос
/ 24 марта 2009

Эй, вы можете сделать это с интеграцией Java / COM. Получая доступ к функциям WMI, вы можете получить всю информацию.

...