Существует ли инструмент командной строки (Linux) для проверки размера кучи (и используемой памяти) приложения Java?
Я пробовал через jmap. Но это дает информацию. о внутренних областях памяти, таких как Eden / PermGen и т. д., что мне не полезно.
Я ищу что-то вроде:
- Макс. Память: 1 ГБ
- Минимальная память: 256 МБ
- Память кучи: 700 МБ
- Используемая память: 460 МБ
Вот и все. Я знаю, что вижу это в JConsole и т. Д., Но мне нужен инструмент командной строки (не могу включить JMX и т. Д.)
Вы знаете какой-нибудь такой инструмент / команду?
jstat
следует использовать, чтобы проверить только общее использование памяти JVM? Допустим, вы запускаете JVMXms=4g
иXmx=4g
хотите посмотреть, сколько памяти уже используется?jstat
Oracle Java 8 ручной страницы :This command is experimental and unsupported
.awk 'print {$3+$4+$6+$8}'
может печатать итоговое использование в столбцахps -ef | grep java
показал мне аргументы vm, которые в моем случае включали значение -Xmx, и это было все, что мне было нужно.jvmtop - это инструмент командной строки, который обеспечивает просмотр в реальном времени по нескольким показателям, включая кучу.
Пример вывода режима обзора виртуальной машины:
источник
Эта команда показывает настроенные размеры кучи в байтах.
Он работает на Amazon AMI на EC2.
источник
Попробуйте это, это работало в Ubuntu и RedHat:
Для Windows:
Для Mac
Вывод всех этих команд похож на вывод ниже:
Чтобы найти размер в МБ, разделите значение на (1024 * 1024).
источник
jstat -gc <vmid>
для запуска приложений.Без использования JMX, который используется большинством инструментов, все, что вы можете сделать, это использовать
и сделать вывод, что настройки будут из параметров командной строки.
По умолчанию вы не можете получить динамическую информацию без JMX, но вы можете написать собственный сервис для этого.
Кстати: я предпочитаю использовать VisualVM, а не JConsole.
источник
Существует инструмент командной строки с визуальным аспектом - jvm-mon . Это инструмент мониторинга JVM для командной строки, который отключается:
Метрики и диаграммы обновляются, пока инструмент открыт.
Образец:
источник
Поздно вечером, но очень простое решение - использовать скрипт jpsstat.sh. Он обеспечивает простую текущую оперативную память , максимальную память и информацию об использовании процессора .
Вот пример вывода скрипта -
источник
В моем случае мне нужно было проверить флаги внутри контейнера докера, в котором не было большинства основных утилит (ps, pstree ...)
Используя,
jps
я получил PID работающей JVM (в моем случае 1), а затемjcmd 1 VM.flags
получил флаги от работающей JVM.Это зависит от того, какие команды у вас есть, но это может кому-то помочь. :)
источник
От Java8 и выше , вы можете использовать команду:
jcmd
JAVA_PROCESS_ID
GC.heap_infoВы можете обратиться к сумме, общей и использованной памяти с выхода.
Для получения дополнительной информации о команде jcmd посетите ссылку: https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html.
источник
GC.heap_info
безусловно, также доступен в OpenJDK 8. Может быть, только в последних версиях? Я использую это: 8u191-b12-2ubuntu0.18.04.1Любой подход должен дать вам примерно одинаковое число. Всегда полезно выделять кучу
-X..m
-X..x
для всех поколений. Затем вы можете гарантировать, а также сделать ps, чтобы увидеть, какие параметры были переданы и, следовательно, используются.Для фактического использования памяти вы также можете приблизительно сравнить VIRT (выделенный и совместно используемый) и RES (фактически используемый), а также значения jstat:
Для Java 8 см. Jstat для этих значений на самом деле. Предполагая, что вы запускаете простой класс без mmap или обработки файлов.
Макс :
(примерно близко и ниже к VIRT памяти)
Макс (Мин, Используется):
(примерно близко к памяти RES)
«Не цитируйте меня по этому поводу», но VIRT mem примерно равна или превышает максимально выделенную память, но пока используемая память свободна / доступна в физической памяти, JVM не выдает исключение памяти. Фактически, максимальный объем памяти даже не проверяется на предмет физической памяти при запуске JVM, даже если в ОС он выключен. Лучшее объяснение того, что Виртуальная память действительно использовала процесс Java, обсуждается здесь .
источник
Сначала получите идентификатор процесса, первое число из перечисленного процесса, из одного из следующих: (или просто используйте
ps aux | grep java
, если хотите)Затем используйте идентификатор процесса здесь:
источник
Использование
top
команды - это самый простой способ проверить использование памяти программой.RES
столбец показывает реальную физическую память, занятую процессом.Для моего случая у меня был файл 10g, прочитанный в Java, и каждый раз, когда я получал исключение OutOfMemory. Это произошло, когда значение в
RES
столбце достигло значения, заданного-Xmx
параметром. Затем, увеличив память с помощью-Xmx
опции, все прошло нормально.источник
С точки зрения размера кучи Java, в Linux вы можете использовать
или
и найдите -Xms, -Xmx, чтобы узнать начальный и максимальный указанный размер кучи.
Однако, если -Xms или -Xmx отсутствуют для интересующего вас Java-процесса, это означает, что ваш Java-процесс использует размеры кучи по умолчанию. Вы можете использовать следующую команду, чтобы узнать размеры по умолчанию.
или конкретный JVM, например,
и найдите InitialHeapSize и MaxHeapSize, которые находятся в байтах.
источник
Если вы используете jrockit, попробуйте инструмент командной строки jrcmd. Например:
Для получения дополнительных команд, таких как heap_diagnostics, используйте «jrcmd help» для их перечисления.
https://blogs.oracle.com/jrockit/entry/why_is_my_jvm_process_larger_t
источник
Пример O / P вышеуказанной команды
Получить более подробную информацию об этом на http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html
источник
До сих пор не существует такого инструмента для печати памяти кучи в формате, который вы запрашивали . Единственный и единственный способ печати - это написать Java-программу с помощью Runtime Class ,
}
ссылка: https://viralpatel.net/blogs/getting-jvm-heap-size-used-memory-total-memory-using-java-runtime/
источник
Найдите идентификатор процесса вашего webapp / java процесса сверху. Используйте кучу jmap, чтобы получить распределение кучи. Я тестировал это на AWS-Ec2 для эластичного бобового стебля
Вы можете увидеть на изображении ниже максимальную кучу 3 ГБ для приложения
источник