Снимаем статистику с виртуальной Java машины по SNMP

31 Янв
2012

Запуская Java приложение часто возникает вопрос — а сколько же памяти выделить. Речь идет о параметрах -Xms -Xmx -XX:MaxPermSize. В этой статье описан механизм при помощи которого можно снимать статистику использования памяти внутри Java машины и сделать вывод об оптимальности настроек. Так же механизм позволяет оценить интенсивность работы Garbage Collector. Часто для подключения к виртуальной машине используют JMX. Но это не совсем удобно. Для данной задачи удобнее SNMP. Вот блог на эту тему на сайте Оракл. А уж если данные доступны по SNMP, любой сисадмин должен знать как ими распорядится дальше. Вот документация по запуску виртуальной машины и настройке её SNMP параметров. Однако возможен конфликт между SNMP сервером, запущенном на этом компьютере, и SNMP самой JVM. Можно, конечно, использовать разные порты для JVM и «родного» SNMP сервера, но лучше проксировать SNMP запросы в JVM используя стандартный SNMP сервер. Этот подход имеет ряд преимуществ:
  • Ничего не хочу сказать плохого о надежности реализации SNMP в JAVA но «родной» SNMP проверен временем.
  • Скорее всего у вас уже настроено ограничение доступа по SNMP и вам при использовании проксирования не понадобится ничего менять ни в фаерволе ни в методах авторизации.
Ну а теперь все вышесказанное на примере: 1 Запускаем JVM c SNMP. для этого в параметры запуска добавляем
-Dcom.sun.management.snmp.port=9005 -Dcom.sun.management.snmp.acl=false
  JVM будет слушать SNMP запросы на порту 9005. Авторизация не требуется. Порт недоступен извне настройками фаервола, а авторизация реализована настройками «родного» SNMPD сервера 2 Настраиваем SNMPD сервер для проксирования запросов в JVM
proxy -v 2c -c public localhost:9005 .1.3.6.1.4.1.42
Теперь по SNMP доступно следующее
1.3.6.1.4.1.42.2.145.3.163.1.1.2.11 jvmHeapUsed

1.3.6.1.4.1.42.2.145.3.163.1.1.2.12 jvmHeapCommitted

1.3.6.1.4.1.42.2.145.3.163.1.1.2.13 jvmHeapMax

1.3.6.1.4.1.42.2.145.3.163.1.1.2.21 jvmNonHeapUsed

1.3.6.1.4.1.42.2.145.3.163.1.1.2.22 jvmNonHeapCommitted

1.3.6.1.4.1.42.2.145.3.163.1.1.2.23 jvmNonHeapMax

1.3.6.1.4.1.42.2.145.3.163.1.1.3.1 jvmThreadCount

1.3.6.1.4.1.42.2.145.3.163.1.1.4.11 jvmRTUptimeMs

1.3.6.1.4.1.42.2.145.3.163.1.1.2.100.1.2 jvmMemManagerName

1.3.6.1.4.1.42.2.145.3.163.1.1.2.101.1.2 jvmMemGCCount

1.3.6.1.4.1.42.2.145.3.163.1.1.2.101.1.3 jvmMemGCTimeMs

1.3.6.1.4.1.42.2.145.3.163.1.1.2.110.1.2 jvmMemPoolName

1.3.6.1.4.1.42.2.145.3.163.1.1.2.110.1.10 jvmMemPoolInitSize

1.3.6.1.4.1.42.2.145.3.163.1.1.2.110.1.11 jvmMemPoolUsed

1.3.6.1.4.1.42.2.145.3.163.1.1.2.110.1.12 jvmMemPoolCommit

1.3.6.1.4.1.42.2.145.3.163.1.1.2.110.1.13 jvmMemPoolMaxSize
  По этим данным можно построить такие графики, например, в Cacti
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх