blob.png    

        在本地执行脚本 

[root@tomcat-202 zabbix_agentd.d]# sh zabbix_tomcat_jmap_heap.sh apache-tomcat-6.0.48 eden_free   
+ '[' -n free ']'
+ echo '/usr/java/jdk1.7.0_79/bin/jmap -heap 5911 2>/dev/null|grep -A 3 Eden|grep  free|awk '\''{print  / 1024 / 1024}'\'''
/usr/java/jdk1.7.0_79/bin/jmap -heap 5911 2>/dev/null|grep -A 3 Eden|grep  free|awk '{print  / 1024 / 1024}'
++ /usr/java/jdk1.7.0_79/bin/jmap -heap 5911
++ grep -A 3 Eden
++ grep free
++ awk '{print $3 / 1024 / 1024}'
+ aaa=17.9902
+ echo 17.9902
+ echo 17.9902
17.9902

        使用zabbix_get获取数值

[root@tomcat-202 ~]# zabbix_get -s10.16.1.202 -p10050  -k"tomcat_status_old.[apache-tomcat-6.0.48,eden_free]"
+ '[' -n free ']'
+ echo '/usr/java/jdk1.7.0_79/bin/jmap -heap 5911 2>/dev/null|grep -A 3 Eden|grep  free|awk '\''{print  / 1024 / 1024}'\'''
/usr/java/jdk1.7.0_79/bin/jmap -heap 5911 2>/dev/null|grep -A 3 Eden|grep  free|awk '{print  / 1024 / 1024}'
++ /usr/java/jdk1.7.0_79/bin/jmap -heap 5911
++ grep -A 3 Eden
++ grep free
++ awk '{print $3 / 1024 / 1024}'
+ aaa=
+ echo
+ echo

        发现全是空值,然后把2>/dev/null去掉之后提示如下报错

Attaching to process ID 5911, please wait...
Error attaching to process: sun.jvm.hotspot.debugger.DebuggerException: Can't attach to the process

        发现在执行jmap命令发生问题,经过google发现是没有权限执行这个问题。如果对zabb进行授权,然后在脚本中使用sudo执行就没有问题。

[root@tomcat-202 ~]# zabbix_get -s10.16.1.202 -p10050  -k"tomcat_status_old.[apache-tomcat-6.0.48,eden_free]"
+ '[' -n free ']'
+ echo 'sudo /usr/java/jdk1.7.0_79/bin/jmap -heap 5911 2>/dev/null|grep -A 3 Eden|grep  free|awk '\''{print  / 1024 / 1024}'\'''
sudo /usr/java/jdk1.7.0_79/bin/jmap -heap 5911 2>/dev/null|grep -A 3 Eden|grep  free|awk '{print  / 1024 / 1024}'
++ sudo
++ /usr/java/jdk1.7.0_79/bin/jmap -heap 5911
++ grep -A 3 Eden
++ grep free
++ awk '{print $3 / 1024 / 1024}'
+ aaa=17.9902
+ echo 17.9902
+ echo 17.9902
17.9902

       不过由于jmap这个命令执行速度很慢,所以有可能获取到空值。最终我的解决办法是在编写定时任务,每分钟生成一个数据文件,然后zabbix去文件中寻找。