Zabbix监控JVM(GC)的状态

通过查询文章结合自身实际情况,总结而出

1.必要条件

1.获取tomcat进程的PID

[root@dxm-beta operation]# ps -ef|grep tomcat
http      1727     1  5 Jul21 ?        00:45:53 /usr/java/default/bin/java -Djava.util.logging.config.file=/data/webapps/wish_frontend/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/data/webapps/wish_frontend -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/data/webapps/wish_frontend/temp org.apache.catalina.startup.Bootstrap start

2.linux下监控jvm的gc状态的工具为jdk自带:!!#ff0000 jstat!!

[root@dxm-beta operation]# jstat -gccause 1727 1 1
S0   S1    E     O     M     CCS   YGC YGCT   FGC FGCT    GCT      LGCC           GCC
0.00 99.28 49.60 97.96 84.28 88.95 769 41.411 21 30.006 71.417 Allocation Failure No GC

2.zabbix-agent客户端监控脚本

/root/shell/zabbix/get_jvm_gc_status.sh

#!/bin/bash
 
JavaBinDir='/usr/java/jdk1.8.0_261-amd64/bin/'   #java执行目录 
PID=`ps -ef |grep tomcat|grep wish_frontend|awk '{print $2}'`  #获取进程PID
 
flag=0
for i in $PID
do
    if [ ! -z $i  ]
    then
        let flag+=1
    fi
done
 
if [ $flag -ne 1 ]
then
    echo "the number of $TargetWord is more than 1 !!!"
    exit
fi
 
# get value from jstat
function gcstat_colum(){
    if [ ! -z ${1} ] && [ -z ${2} ]
    then
        ret=`"${JavaBinDir}"jstat -gccause $PID 1 1 |tail -1|awk -F' ' '{print $'${1}'}'`
        echo $ret
    elif [ ! -z ${1} ]&& [ ! -z ${2} ]
    then
        ret=`"${JavaBinDir}"jstat -gccause $PID 1 1 |tail -1|awk -F' ' '{print $'${1}',$'${2}'}'`
        echo $ret
    else
        echo 'function get wrong arguments !'
    fi
}
 
# print prompt when script parameter is wrong
function print_prompt(){
    echo '    please input correct parameter !' 
    echo '
    s1  (Survivor0)
    s2  (Survivor1)
    eden(Eden)
    old (Old)
    meta(Metaspace)
    css (CCS)
    ygc (YGC)
    ygct(YGCT)
    fgc (FGC)
    fgct(FGCT)
    gct (GCT)
	lgcc(LGCC)
    gcc (GCC)
'
}
 
# transfer script's parameter to function gcstat_colum()
case $1 in
s1)
    gcstat_colum 1
    ;;
s2)
    gcstat_colum 2
    ;;
eden)
    gcstat_colum 3
    ;;
old)
    gcstat_colum 4
    ;;
meta)
    gcstat_colum 5
    ;;
css)
    gcstat_colum 6
    ;;
ygc)
    gcstat_colum 7
    ;;
ygct)
    gcstat_colum 8
    ;;
fgc)
    gcstat_colum 9
    ;;
fgct)
    gcstat_colum 10
    ;;
gct)
    gcstat_colum 11
    ;;
lgcc)
    gcstat_colum 12 13
    ;;
gcc)
    gcstat_colum 14 15
    ;;
*)
    print_prompt
    ;;
esac
#添加执行权限
[root@dxm-beta ~]# chmod +x /root/shell/zabbix/get_jvm_gc_status.sh

3.允许zabbix提升到root权限,使其拥有执行jstat的权限

[root@dxm-beta ~]# vim /etc/sudoers.d/zabbix
zabbix ALL=(ALL) NOPASSWD: /root/shell/zabbix/get_jvm_gc_status.sh *
[root@dxm-beta ~]# chmod 777 /etc/sudoers
[root@dxm-beta ~]# vim  /etc/sudoers
Defaults:zabbix !requiretty

4.zabbix-agent客户端配置自定义键值

[root@dxm-beta ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/userparameter_socket.conf
UserParameter=Socket.Survivor0,sudo /root/shell/zabbix/get_jvm_gc_status.sh s1
UserParameter=Socket.Survivor1,sudo /root/shell/zabbix/get_jvm_gc_status.sh s2
UserParameter=Socket.Eden,sudo /root/shell/zabbix/get_jvm_gc_status.sh eden
UserParameter=Socket.Old,sudo /root/shell/zabbix/get_jvm_gc_status.sh old
UserParameter=Socket.Metaspace,sudo /root/shell/zabbix/get_jvm_gc_status.sh meta
UserParameter=Socket.CCS,sudo /root/shell/zabbix/get_jvm_gc_status.sh css
UserParameter=Socket.YGC,sudo /root/shell/zabbix/get_jvm_gc_status.sh ygc
UserParameter=Socket.YGCT,sudo /root/shell/zabbix/get_jvm_gc_status.sh ygct
UserParameter=Socket.FGC,sudo /root/shell/zabbix/get_jvm_gc_status.sh fgc
UserParameter=Socket.FGCT,sudo /root/shell/zabbix/get_jvm_gc_status.sh fgct
UserParameter=Socket.GCT,sudo /root/shell/zabbix/get_jvm_gc_status.sh gct
UserParameter=Socket.LGCC,sudo /root/shell/zabbix/get_jvm_gc_status.sh lgcc
UserParameter=Socket.GCC,sudo /root/shell/zabbix/get_jvm_gc_status.sh gcc

agent修改配置后需要重启

[root@dxm-beta ~]# service zabbix_agentd restart

5.web端添加自定义item

1.创建模板,模板名称为Templates Socket
在这里插入图片描述
在这里插入图片描述
2.在新模板Templates Socke 下创建一个应用,名为 JVM
在这里插入图片描述
3.在应用下创建item,比如 Socket.Eden
在这里插入图片描述
4.其他item都类似,添加完毕如下图
在这里插入图片描述
注:GCC 和 LGCC的数据类型为字符,其余数据类型都是float浮点数。

S0:幸存1区当前使用比例
S1:幸存2区当前使用比例
E:伊甸园区使用比例
O:老年代使用比例
M:元数据区使用比例
CCS:压缩使用比例
YGC:年轻代垃圾回收次数
FGC:老年代垃圾回收次数
FGCT:老年代垃圾回收消耗时间
GCT:垃圾回收消耗总时间

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值