近期看了一下JVM對監控的支持,除了常規的JMX外居然還有SNMP, 有點意思, 這個網管協議適配的地方還真多,那么就先測試一下。
先隨便找一個能在后臺持續運行的java小程序,如我手頭的BIO的socket服務器。
JVM端SNMP的配置
啟動SNMP需要兩個地方更改,(http://docs.oracle.com/javase/7/docs/technotes/guides/management/snmp.html)
- 在jvm的system properties上加一個
com.sun.management.snmp.port=PORT_NUMBER, PORT_NUMBER指JVM監控的SNMP端口,常規應該是161
- 還需要Copy the ACL template file from JRE_HOME/lib/management/snmp.acl.template to JRE_HOME/lib/management/snmp.acl.
將這個原始的模板文件改一下,解注釋掉一些comments,變為以下格式:
acl = { { communities = public, private access = read-only managers = localhost } } trap = { { trap-community = public hosts = localhost } }
然后操作系統改一下,讓這個acl文件只有一個owner,就是啟動java的這個用戶的名字,如何改參考這個文章http://docs.oracle.com/javase/6/docs/technotes/guides/management/security-windows.html
如果這步不搞,啟動時會報錯
Error: Password file read access must be restricted: C:\Program Files\Java\jre7\
lib\management\snmp.acl
我這里嫌麻煩,直接將啟動參數設成不檢查(com.sun.management.snmp.acl=false),這樣能跳過這個檢查
java -Dcom.sun.management.snmp.port=161 -Dcom.sun.management.snmp.acl=false com.tool.server.MyBIOServer
這里JVM這邊的配置就都OK了。
SNMP管理端的配置
先到這個地址下JVM的SNMP MIB文件:http://java.sun.com/j2se/1.5.0/docs/guide/management/JVM-MANAGEMENT-MIB.mib
然后找一個SNMP客戶端,我用的是iReasoning MIB Browser,load這個下過來的MIB文件。
地址填上localhost, 端口用我們之前設置的161, 直接walk一下被管理端JVM的所有暴露出來的屬性
可以看到各種JVM內部信息都有, jvmClassessLoadedCount 等,還支持trap,低內存警告,還是不錯。
文章列表