关于zabbix如何通过jmx监控tomcat等java程序我在前面的博客中已经写过了,有兴趣的可以戳一下这个链接:我是链接,快戳我

    最近在新公司部署zabbix监控的时候在压测环境部署监控没有问题,然后使用相同的方法部署在线上环境中之后发现模版中有一部分参数无法被获取,于是开始各种找问题。最后在tomcat的配置文件中发现线上环境的tomcat配置参数比测试环境的配置参数多了八个参数,线上环境部分配置参数如下:

export JAVA_OPTS="-Xms2048m -Xmx4096M -Xmn512m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:+DisableExplicitGC -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12353 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=x.x.x.x"

其中部分参数和压测环境不一样,不一样的参数如下:

-XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:+DisableExplicitGC

于是,一个一个排查参数,最后,发现是-XX:+UseConcMarkSweepGC这个参数影响zabbix通过jmx获取关于内存回收机制的某些值,导致模版中的某些值无法获取。删除这个参数之后就可以正常获取tomcat的各项监控参数了。

于是在咨询了同事后发现该参数是对java的内存回收机制的优化的参数,在线上环境暂时不要删除,于是某些监控项目无法实现,但是经过将近一天的排查,终于发现tomcat配置中的这个坑了,希望各位同道们以后在碰到类似的情况的时候可以参考借鉴我的这次经历检查是否是该参数搞的鬼,哈哈,找到问题了,在这分享给各位同道们参考哈。