Linux узнать сколько памяти выделено java

как узнать java heap memory size

Для вычисления необходимого размера кучи (heap) мы воспользуемся опцией -XX:+PrintFlagsFinal . В Java размер изначального (initial) и максимального (maximum) размера кучи (heap) выделяется по эргономическому алгоритму, дополнительно ссылки для java 7 и для java 8.

Если коротко то все это расчитывается по следующей формуле:

Изначальный размер кучи (initial heap size)

Соотношение 1 ⁄64 от количества физической памяти на 1GB

Максимальный разер кучи (maximum heap size)

Соотношение 1 ⁄4 от количества физической памяти на 1GB

К примеру рассмотрим вот такую машинку:

Для отображения необходимой информации необходимо выполнить следующую команду:

Вот такой результат мы должны увидеть на экране:

Итого по полученным данным:

Изначальный размер кучи (initial heap size)

InitialHeapSize = 97801152 байт (97,8 Мб)

Максимальный разер кучи (maximum heap size)

MaxHeapSize = 1566572544 байт (1,5 Гб)

Выделенный размер кучи (heap memory size) довольно близок к результатам эргономики:

Изначальный размер кучи (initial heap size)

6144 Мб / 64 = 96 Мб

Максимальный разер кучи (maximum heap size)

6144 Мб / 4 = 1536 Гб

Для установки изначального размера кучи (initial heap size) используют -Xms , а для максимального размера кучи (maximum heap size) используют -Xmx .

Итого получаем команду для запуска:

Как правило значения округляют в большую сторону, так что не бойтесь выделить немного больше и эксперементировать.

Источник

linux-notes.org

Узнать размер Java Heap Memory Size

Есть проблема с Java Heap Memory Size, ее нужно нормально указать для того чтобы все нормально работало ( например, веб- сервер tomcat, liferay, OpenMRS и так далее) и в данной статье «Узнать размер Java Heap Memory Size» расскажу как можно найти оптимальное значение для java.

Сейчас я покажу вам, как использовать-XX:+PrintFlagsFinal чтобы узнать ваш размер кучи «heap size». В Java, по умолчанию и максимальный размер кучи распределяются на основании алгоритма — эргономики (ergonomics algorithm).

Как же рассчитывается Heap sizes?

Начальный размер кучи — это соотношение 1/64 физической памяти к 1 Гб. (Initial heap size of 1/64 of physical memory up to 1Gbyte)
Максимальный размер кучи — это соотношение 1/4 физической памяти до 1 Гб. (Maximum heap size of 1/4 of physical memory up to 1Gbyte)

Тем не менее, алгоритм что выше, как раз для справки, могут варьироваться в разных VM.

Обзор памяти Java

Краткий обзор структуры памяти Java:

1. Java Heap Size
Место для хранения объектов, созданных приложением Java, это где Garbage Collection берет память для приложений Java. Для «тяжелого процесса Java», недостаточный размер кучи вызовет популярную ошибку: java.lang.OutOfMemoryError: Java heap space.

-Xms — Установить начальный размер Java куча «Java heap size»
-Xmx — Установить максимальный размер Java куча «Java heap size»

2. Размер Perm Gen (Perm Gen Size).
Место для хранения определение загруженного класса и метаданных. Если большой кодовый, базовый проект загружен, имеет недостаточный размер Perm Gen size то это вызовит ошибку: Java.Lang.OutOfMemoryError: PermGen.

-XX:PermSize — Установить начальный размер для параметра «PermGen Size».
-XX:MaxPermSize — Установить максимальный размер для параметра «PermGen Size».

Читайте также:  Sing out windows это

3. Размер java стека «Java Stack Size»
Размер java нитей (Size of a Java thread). Если проект имеет много обработки нитей, попробуйте уменьшить этот размер стека, чтобы избежать нехватки памяти.

-Xss = Установить размер стека Java (java thread stack size).

ЗАМЕТКА
Значение по умолчанию для heap size, perm gen, или stack size отличаются от различных JVM. Лучшие практически всегда определить собственные значение для сервера.

ТЕСТЫ или ГОТОВЫЕ примеры

Приведу различные тесты на разных ОС.

Ubuntu

Среда тестирования имеет такие характеристики:

ОС : Ubuntu 13 (64 битная) (Под управлением VirtualBox)
RAM : 4Гб оперативной памяти
CPU : 1 x Процессор
JDK : 1.7

Выполним команду для отображения необходимой информации:

Для JVM выделено следующие значения по умолчанию:

Java heap size
InitialHeapSize = 64781184 байт (61.7 Мб) и MaxHeapSize = 1038090240 байт (990Мб).

PermGen Size
PermSize = 21757952 байт (20.75 Мб), MaxPermSize = 174063616 байт (166 Мб)

Thread Stack Size
ThreadStackSize = 1024 кб (1 Мб)

Выделенный размер кучи (heap memory size) довольно близок к результатам эргономики.

#ergonomics algorithm
Initial heap size = 4096M/64 = 64 Мб
Maximum heap size = 4096M/4 = 1024 Мб

Mac OS X

Среда тестирования имеет такие характеристики:

ОС : Mac OSX 10.9
RAM : 8 Гб оперативной памяти
CPU : 4 x Поцессор
JDK : 1.7

Запускаем команду чтобы проверить:

Узнать размер Java Heap Memory Size в macOS X

Для JVM выделено следующие значения по умолчанию:

Java heap size
InitialHeapSize = 20655360 байт (19.69M) и MaxHeapSize = 331350016 bytes (316 Мб).

PermGen Size
PermSize = 21757952 байт (20.75 Мб), MaxPermSize = 85983232 байт (82 Мб).

Java Stack Size
ThreadStackSize = 1024 Кб (1 Мб)

Выделенный размер кучи памяти (heap memory size) не имеют никакого значения, если сравнить со следующий результат по алгоритму эргономики.

#ergonomics algorithm
Initial heap size = 8192M/64 = 128 Мб
Maximum heap size = 8192M/4 = 2048 Мб

Windows
Grep нет в Windows, вместо этого, мы используем Findstr.

Среда тестирования имеет такие характеристики:

ОС : Windows 8
RAM : 16 Гб
CPU : 8 x процессор
JDK : 1.7

Узнать размер Java Heap Memory Size в windows

Для JVM в Windows ОС выделено следующие значения по умолчанию:

Java heap size
InitialHeapSize = 266634176 байт (256 Мб) и MaxHeapSize = 4266146816 байт (4068 Мб).

PermGen Size
PermSize = 21757952 байт (20.75 Мб), MaxPermSize = 85983232 bytes (823 Мб).

Java Stack Size
ThreadStackSize = 0 kilobytes. (weird…)

Выделенный размер кучи памяти почти такой же как и по алгоритму эргономика:

#ergonomics algorithm
Initial heap size = 16384/64 = 256 Мб
Maximum heap size = 16384/4 = 4096 Мб

Предлагаемые для Java Memory

Ниже, я привел мою рекомендацию (параметры) для малой и средней нагрузки приложений Java 🙂

Heap = -Xms512m -Xmx1024m
PermGen = -XX:PermSize=64m -XX:MaxPermSize=128m
Thread = -Xss512k

P.S: Для большинства проектов Java, 512k памяти для потока (thread) более чем достаточно.

оптимаьные значения для Java Heap Memory Size

Читайте также:  Tap windows adapter v9 что это такое kms

Часто задаваемые вопросы.

какая -version?
Избегайте жалоб от компилятора Java, заменить «-version» с вашим именем приложения Java.

Что это -XX:+PrintCommandLineFlags?
Это -XX:+PrintCommandLineFlags используется для вывода значения,только для изменения VM (обозначается так: = символ).

Вывод

Наконец, значения по умолчанию для heap memory, perm gem и stack size отличается от JVM, не ожидайте что JVM будет использовать оптимальные значения для вашего приложения Java.

На этом, я завершаю «Узнать размер Java Heap Memory Size». Надеюсь, было познавательно.

Источник

Инструмент командной строки для определения размера кучи Java и используемой памяти (Linux)?

Существует ли инструмент командной строки (Linux) для проверки размера кучи (и используемой памяти) приложения Java?

Я пробовал через jmap. Но это дает информацию. о внутренних областях памяти, таких как Eden / PermGen и т. д., что мне не полезно.

Я ищу что-то вроде:

  • Макс. Память: 1 ГБ
  • Минимальная память: 256 МБ
  • Память кучи: 700 МБ
  • Используемая память: 460 МБ

Вот и все. Я знаю, что вижу это в JConsole и т. Д., Но мне нужен инструмент командной строки (не могу включить JMX и т. Д.)

Вы знаете какой-нибудь такой инструмент / команду?

У каждого Java-процесса есть pid , который вы сначала должны найти с помощью jps команды.

Получив pid, вы можете использовать jstat -gc [insert-pid-here] статистику поведения кучи для сбора мусора.

jstat -gccapacity [insert-pid-here] представит информацию о создании пула памяти и возможностях пространства.

jstat -gcutil [insert-pid-here] представит использование каждого поколения в процентах от его мощности. Полезно, чтобы получить краткий обзор использования.

Смотрите документацию jstat на сайте Oracle.

250 N» было очень полезно взять N выборок с интервалами 250 мс и отобразить выходные данные в процентах для соответствующих пробелов. Спасибо.

jvmtop — это инструмент командной строки, который обеспечивает просмотр в реальном времени по нескольким показателям, включая кучу.

Пример вывода режима обзора виртуальной машины:

Эта команда показывает настроенные размеры кучи в байтах.

Он работает на Amazon AMI на EC2.

Попробуйте это, это работало в Ubuntu и RedHat:

Вывод всех этих команд похож на вывод ниже:

Чтобы найти размер в МБ, разделите значение на (1024 * 1024).

Без использования JMX, который используется большинством инструментов, все, что вы можете сделать, это использовать

и сделать вывод, что настройки будут из параметров командной строки.

По умолчанию вы не можете получить динамическую информацию без JMX, но вы можете написать собственный сервис для этого.

Кстати: я предпочитаю использовать VisualVM, а не JConsole.

Существует инструмент командной строки с визуальным аспектом — jvm-mon . Это инструмент мониторинга JVM для командной строки, который отключается:

  • использование кучи, размер и макс
  • процессы JVM
  • использование процессора и GC
  • лучшие темы

Метрики и диаграммы обновляются, пока инструмент открыт.

Поздно вечером, но очень простое решение — использовать скрипт jpsstat.sh. Он обеспечивает простую текущую оперативную память , максимальную память и информацию об использовании процессора .

  • Goto проект GitHub и скачать jpsstat.sh файл
  • Щелкните правой кнопкой мыши на jpsstat.sh и перейдите кразрешениям. и сделайте ее исполняемой
  • Теперь запустите скрипт, используя следующую команду ./jpsstat.sh
Читайте также:  Курсоры для windows 10 с автоматической установкой

Вот пример вывода скрипта —

В моем случае мне нужно было проверить флаги внутри контейнера докера, в котором не было большинства основных утилит (ps, pstree . )

Используя, jps я получил PID работающей JVM (в моем случае 1), а затем jcmd 1 VM.flags получил флаги от работающей JVM.

Это зависит от того, какие команды у вас есть, но это может кому-то помочь. 🙂

От Java8 и выше , вы можете использовать команду:

jcmd JAVA_PROCESS_ID GC.heap_info

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

Любой подход должен дать вам примерно одинаковое число. Всегда полезно выделять кучу -X..m -X..x для всех поколений. Затем вы можете гарантировать, а также сделать ps, чтобы увидеть, какие параметры были переданы и, следовательно, используются.

Для фактического использования памяти вы также можете приблизительно сравнить VIRT (выделенный и совместно используемый) и RES (фактически используемый), а также значения jstat:

Для Java 8 см. Jstat для этих значений на самом деле. Предполагая, что вы запускаете простой класс без mmap или обработки файлов.

Макс :

(примерно близко и ниже к VIRT памяти)

Макс (Мин, Используется):

(примерно близко к памяти RES)

«Не цитируйте меня по этому поводу», но VIRT mem примерно равна или превышает максимально выделенную память, но пока используемая память свободна / доступна в физической памяти, JVM не выдает исключение памяти. Фактически, максимальный объем памяти даже не проверяется на предмет физической памяти при запуске JVM, даже если в ОС он выключен. Лучшее объяснение того, что Виртуальная память действительно использовала процесс Java, обсуждается здесь .

Источник

как проверить размер кучи, выделенной для JVM linux

У меня есть apache-tomcat в качестве моего веб-сервера. Я хочу проверить, какой размер кучи выделяется для JVM linux. И откуда я могу изменить его.

4 ответов

вы можете легко проверить выделение памяти размера кучи с помощью JConsole, если у вас есть путь к вашему jre/jdk, настроенному правильно в системе, вы должны иметь возможность запустить его с помощью команды jconsole из любой точки мира.

простой способ в Linux-запустить следующее:

ps-ef |grep tomcat

ищите начальную и максимальную память JVM:

в этом случае он выделяет 1G при запуске и максимум .

размер кучи, используемый Tomcat, определен в его конфигурации.

Это место, где вы можете проверить и изменить его.

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

Если вам нужна дополнительная информация с сервера, но вы не можете войти в него интерактивно (или не имеете GUI или JMX и т. д.), Вы можете включить javamelody в вашем файле POM / libs, и он создаст страницу на хосте: 8080 / / мониторинг со всеми видами хорошей информации, включая размер кучи, статистику GC и размер permgen.

Это не безопасная вещь, чтобы оставлять запущенными в производственной среде — если вам это нужно все время, по крайней мере, заблокировать его!

Источник

Оцените статью