получите системную информацию уровня ОС

Если вас беспокоит размер файла / использование памяти, сопоставление памяти с файлом и сканирование назад для новых строк - это решение:

Как искать строку в текстовых файлах?

230
задан Hrqls 3 June 2014 в 23:14
поделиться

8 ответов

Можно получить некоторую информацию ограниченной памяти от Класса среды выполнения. Это действительно не точно, что Вы ищете, но я думал, что обеспечу его ради полноты. Вот небольшой пример.Править: Можно также получить информацию использования диска от java.io. Класс файла. Материал использования дискового пространства требует Java 1.6 или выше.

public class Main {
  public static void main(String[] args) {
    /* Total number of processors or cores available to the JVM */
    System.out.println("Available processors (cores): " + 
        Runtime.getRuntime().availableProcessors());

    /* Total amount of free memory available to the JVM */
    System.out.println("Free memory (bytes): " + 
        Runtime.getRuntime().freeMemory());

    /* This will return Long.MAX_VALUE if there is no preset limit */
    long maxMemory = Runtime.getRuntime().maxMemory();
    /* Maximum amount of memory the JVM will attempt to use */
    System.out.println("Maximum memory (bytes): " + 
        (maxMemory == Long.MAX_VALUE ? "no limit" : maxMemory));

    /* Total memory currently available to the JVM */
    System.out.println("Total memory available to JVM (bytes): " + 
        Runtime.getRuntime().totalMemory());

    /* Get a list of all filesystem roots on this system */
    File[] roots = File.listRoots();

    /* For each filesystem root, print some info */
    for (File root : roots) {
      System.out.println("File system root: " + root.getAbsolutePath());
      System.out.println("Total space (bytes): " + root.getTotalSpace());
      System.out.println("Free space (bytes): " + root.getFreeSpace());
      System.out.println("Usable space (bytes): " + root.getUsableSpace());
    }
  }
}
202
ответ дан William Brendel 23 November 2019 в 03:41
поделиться

Я думаю, что лучший метод там должен реализовать API SIGAR Hyperic. Это работает на большинство главных операционных систем (штопка около чего-либо современного) и очень легко работать с. Разработчик (разработчики) является очень быстро реагирующим на их форуме и списках рассылки. Мне также нравится этот, это <ударяют> GPL2 , Apache лицензировал . Они обеспечивают тонну примеров в Java также!

SIGAR == информация о Системе, Сбор И Инструмент создания отчетов.

42
ответ дан Aravindan R 23 November 2019 в 03:41
поделиться

пакет java.lang.management действительно дает Вам намного больше информации, чем Время выполнения - например, это даст Вам память "кучи" (ManagementFactory.getMemoryMXBean().getHeapMemoryUsage()) отдельный от памяти не"кучи" (ManagementFactory.getMemoryMXBean().getNonHeapMemoryUsage()).

можно также получить использование ЦП процесса (не пишущий собственный код JNI), но необходимо бросить java.lang.management.OperatingSystemMXBean к com.sun.management.OperatingSystemMXBean. Это работает над Windows и Linux, я не протестировал его в другом месте.

, Например... называют получать getCpuUsage () метод более часто для получения более точных показаний.

public class PerformanceMonitor { 
    private int  availableProcessors = getOperatingSystemMXBean().getAvailableProcessors();
    private long lastSystemTime      = 0;
    private long lastProcessCpuTime  = 0;

    public synchronized double getCpuUsage()
    {
        if ( lastSystemTime == 0 )
        {
            baselineCounters();
            return;
        }

        long systemTime     = System.nanoTime();
        long processCpuTime = 0;

        if ( getOperatingSystemMXBean() instanceof OperatingSystemMXBean )
        {
            processCpuTime = ( (OperatingSystemMXBean) getOperatingSystemMXBean() ).getProcessCpuTime();
        }

        double cpuUsage = (double) ( processCpuTime - lastProcessCpuTime ) / ( systemTime - lastSystemTime );

        lastSystemTime     = systemTime;
        lastProcessCpuTime = processCpuTime;

        return cpuUsage / availableProcessors;
    }

    private void baselineCounters()
    {
        lastSystemTime = System.nanoTime();

        if ( getOperatingSystemMXBean() instanceof OperatingSystemMXBean )
        {
            lastProcessCpuTime = ( (OperatingSystemMXBean) getOperatingSystemMXBean() ).getProcessCpuTime();
        }
    }
}
93
ответ дан travega 23 November 2019 в 03:41
поделиться

Взгляните на API, доступные в пакет java.lang.management . Например:

  • OperatingSystemMXBean.getSystemLoadAverage()
  • ThreadMXBean.getCurrentThreadCpuTime()
  • ThreadMXBean.getCurrentThreadUserTime()

существуют загрузки других полезных вещей там также.

6
ответ дан staffan 23 November 2019 в 03:41
поделиться

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

1
ответ дан 23 November 2019 в 03:41
поделиться

Обычно, для получения низкого уровня информация ОС можно назвать ОС определенными командами, которые дают Вам информацию, которую Вы хотите с Runtime.exec () или читаете файлы, такие как/proc /* в Linux.

5
ответ дан Peter Lawrey 23 November 2019 в 03:41
поделиться

Использование ЦП непросто - java.lang.management через com.sun.management.OperatingSystemMXBean.getProcessCpuTime подходит близко (см. Отличный фрагмент кода Патрика выше), но обратите внимание, что он дает только доступ время, затрачиваемое процессором на ваш процесс. он не сообщит вам о времени процессора, затраченном на другие процессы, или даже о времени процессора, затраченном на выполнение системных действий, связанных с вашим процессом.

например, у меня есть интенсивный в сети java-процесс - это единственное, что работает, и процессор составляет 99%, но только 55% из них указывается как «процессор CPU».

даже не заставляю меня начинать со «средней нагрузки», поскольку это почти бесполезно, несмотря на то, что это единственный элемент, связанный с процессором в MX фасоль. если бы только солнце в их случайной мудрости выдавало что-то вроде "getTotalCpuTime" ...

5
ответ дан 23 November 2019 в 03:41
поделиться

Существует проект Java, который использует JNA (поэтому нет необходимости устанавливать собственные библиотеки) и находится в активной разработке. В настоящее время он поддерживает Linux, OSX, Windows, Solaris и FreeBSD и предоставляет информацию о RAM, CPU, Battery и файловой системе.

23
ответ дан 23 November 2019 в 03:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: