В проекте cmdline-jmxclient была проведена доработка с целью расширения функциональности:
Поскольку каждый запуск java -jar vjmxclient.jar фактически создаёт новую JVM, в файл vjmxcli.sh были добавлены дополнительные параметры JVM для оптимизации потребления ресурсов.
Для корректной работы необходимо использовать ту же версию JDK, что и целевая JVM.
// Подключение по IP-адресу и порту
./vjmxcli.sh - 127.0.0.1:8060 java.lang:type=Memory HeapMemoryUsage
// Подключение по PID
./vjmxcli.sh - 98583 java.lang:type=Memory HeapMemoryUsage
Параметры:
-
— пароль отсутствует;127.0.0.1:8060
или 98582
— адрес приложения и порт JMX, либо PID;java.lang:type=Memory
— имя MBean;HeapMemoryUsage
— атрибут.Иногда использование jstat становится невозможным, например, если целевая JVM использует -Djava.tmp.dir для переопределения временного каталога или -XX:+PerfDisableSharedMem для запрета perfdata. В таких случаях можно использовать vjmxcli в качестве альтернативы jstat.
Также стоит отметить, что в jstat в качестве знаменателя используется уже выделенная память, а не максимально доступная, поэтому при использовании этого процента для оповещения о нехватке памяти могут возникать ложные срабатывания. Например, если текущий объём используемой памяти составляет 95 Мбайт, уже выделенный объём — 100 Мбайт, а максимальный объём — 1 Гбайт, то оповещение о том, что используемая память превышает 90%, будет ошибочным.
Алгоритм vjmxCli заключается в следующем: если для данного региона памяти задано максимальное значение, оно используется в качестве знаменателя, иначе используется уже выделенный объём памяти.
Причина, по которой jstat не использует этот подход, заключается в том, что если Max не задан, JMX возвращает -1, а PerfData возвращает приблизительное большое значение. Поэтому jstat, который считывает только PerfData, не может корректно использовать значение Max.
// Однократный вывод
./vjmxcli.sh - 127.0.0.1:7001 gcutil
// Непрерывный вывод с интервалом в 5 секунд
./vjmxcli.sh - 127.0.0.1:7001 gcutil 5
// Подключение по PID, непрерывный вывод с интервалом в 5 секунд
./vjmxcli.sh - 98583 gcutil 5
Пример вывода для JDK7:
S S E O P YGC YGCT FGC FGCT GCT
41.25 41.25 2.25 0.00 0.48 2 0.025 0 0.0 0.025
Пример вывода для JDK8:
S S E O M CCS YGC YGCT FGC FGCT GCT
41.25 41.25 2.25 0.00 0.48 0 2 0.025 0 0.0 0.025
Элемент | Object Name | Attribute Name |
---|---|---|
Память кучи | java.lang:type=Memory | HeapMemoryUsage |
Некуча (исключая память вне кучи) | java.lang:type=Memory | NonHeapMemoryUsage |
Внекучная память (исключая новую версию Netty, запрашивающую внекучную память) | java.nio:type=BufferPool,name=direct | MemoryUsed |
Количество потоков | java.lang:type=Threading | ThreadCount |
Число потоков демона | java.lang:type=Threading | DaemonThreadCount |
Память поколений и GC | разные значения для разных JDK | разные значения для разных JDK |
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=7001
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=127.0.0.1
При подключении по PID эти параметры заранее определять не нужно.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )