Как я проверяю ЦП и Использование памяти в Java?

94
задан Community 21 August 2019 в 23:30
поделиться

10 ответов

Если Вы смотрящий специально для в памяти JVM:

Runtime runtime = Runtime.getRuntime();

NumberFormat format = NumberFormat.getInstance();

StringBuilder sb = new StringBuilder();
long maxMemory = runtime.maxMemory();
long allocatedMemory = runtime.totalMemory();
long freeMemory = runtime.freeMemory();

sb.append("free memory: " + format.format(freeMemory / 1024) + "<br/>");
sb.append("allocated memory: " + format.format(allocatedMemory / 1024) + "<br/>");
sb.append("max memory: " + format.format(maxMemory / 1024) + "<br/>");
sb.append("total free memory: " + format.format((freeMemory + (maxMemory - allocatedMemory)) / 1024) + "<br/>");

Однако они должны быть взяты только оценка...

70
ответ дан Community 24 November 2019 в 06:07
поделиться

Если Вы используете Tomcat, проверяете Датчик фунта на квадратный дюйм , который позволяет Вам контролировать потребление внутренней памяти и внешней памяти, а также хост других областей.

1
ответ дан Tim Howland 24 November 2019 в 06:07
поделиться

профилировщик YourKit Java является превосходным коммерческим решением. Можно найти дополнительную информацию в документах о ЦП, представляющий и память, представляющая .

1
ответ дан Gregg 24 November 2019 в 06:07
поделиться

JConsole является простым способом контролировать под управлением JAVA-приложение, или можно использовать Профилировщика для получения более подробной информации о приложении. Мне нравится использовать Профилировщик NetBeans для этого.

1
ответ дан blahspam 24 November 2019 в 06:07
поделиться

Java Время выполнения объект может сообщить об использовании памяти JVM. Для потребления ресурсов ЦП необходимо будет использовать внешнюю утилиту, как главный или Windows Process Manager Unix.

3
ответ дан moonshadow 24 November 2019 в 06:07
поделиться

Начиная с Java 1.5 JDK идет с новым инструментом: JConsole, который может показать Вам ЦП и использование памяти любых 1.5 или более поздней JVM. Это может сделать диаграммы этих параметров, экспорта в CSV, показать количество загруженных классов, количество экземпляров, мертвых блокировок, распараллеливает и т.д.

5
ответ дан Telcontar 24 November 2019 в 06:07
поделиться

Для использования памяти следующее будет работать,

long total = Runtime.getRuntime().totalMemory();
long used  = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();

Для использования ЦП, необходимо будет использовать внешнее приложение для измерения его.

8
ответ дан Rich Adams 24 November 2019 в 06:07
поделиться

JMX, MXBeans (ThreadMXBean, и т.д.) обеспеченный даст Вам использования ЦП и Память.

OperatingSystemMXBean operatingSystemMXBean = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();
operatingSystemMXBean.getSystemCpuLoad();
9
ответ дан Timo Bähr 24 November 2019 в 06:07
поделиться

Если Вы используете JVM Sun и интересуетесь использованием внутренней памяти приложения (сколько из выделенной памяти Ваше приложение использует), я предпочитаю включать встроенный вход сборки "мусора" JVMs. Вы просто добавляете-verbose:gc к команде запуска.

Из документации Sun:

параметр командной строки-verbose:gc печатает информацию в каждом наборе. Обратите внимание, что формат вывода-verbose:gc подвержен изменениям между выпусками платформы J2SE. Например, здесь производится из большого серверного приложения:

[GC 325407K->83000K(776768K), 0.2300771 secs]
[GC 325816K->83372K(776768K), 0.2454258 secs]
[Full GC 267628K->83769K(776768K), 1.8479984 secs]

Здесь мы видим два незначительных набора и один главный. Числа прежде и после стрелки

325407K->83000K (in the first line)

указывают на объединенный размер живых объектов прежде и после сборки "мусора", соответственно. После незначительных наборов количество включает объекты, которые не обязательно живы, но не могут быть исправлены, или потому что они непосредственно живы, или потому что они в или сосланы от штатного поколения. Число в круглой скобке

(776768K) (in the first line)

является общим свободным местом, не считая пространство в постоянном поколении, которое является общей "кучей" минус одни из пробелов оставшегося в живых. Незначительный набор взял приблизительно четверть секунды.

0.2300771 secs (in the first line)

Для большего количества информации см.: http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html

17
ответ дан Steve Blackwell 24 November 2019 в 06:07
поделиться

Если Вы используете runtime/totalMemory решение, которое было отправлено во многих ответах здесь (я сделал это много), несомненно, вызовут две сборки "мусора" сначала, если Вы хотите довольно точные/последовательные результаты.

Для effiency Java обычно позволяет мусору заполнять всю память прежде, чем вызвать GC, и даже тогда это обычно не полный GC, таким образом, Ваши результаты для runtime.freeMemory () всегда быть где-нибудь между "реальной" суммой свободной памяти и 0.

первый GC не получает все, он получает максимум от него.

подъем состоит в том, что, если Вы просто делаете freeMemory () вызов, Вы получите число, которое абсолютно бесполезно и значительно различается, но если делают 2 gc, первые, это - очень надежный индикатор. Это также делает стандартную программу НАМНОГО медленнее (секунды, возможно).

4
ответ дан Bill K 24 November 2019 в 06:07
поделиться
Другие вопросы по тегам:

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