zabbix监控java进程内存使用情况
创始人
2025-06-01 17:19:01
0

 需求:监控主机里面所有Java进程的内存使用情况。

查看linux系统里面有哪些java进程在运行:jps命令

[root@localhost zabbix]# jps
26490 YarnTaskExecutorRunner
12012 NodeManager
14047 YarnTaskExecutorRunner
25007 Jps

查看java进程的内存使用情况:jstat命令  -gc  -gcutil

[root@node035 zabbix]# jstat -gc 12012S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
2560.0 2560.0  0.0   2208.0 335872.0 180374.6  338432.0   57522.0   51624.0 50525.8 5808.0 5542.1 104079  881.980   3      0.384  882.364
[root@node035 zabbix]# jstat -gcutil 12012S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   0.00  86.25  89.43  17.00  97.87  95.42 104079  881.980     3    0.384  882.364

采集数据脚本:

[root@localhost monitor]# cat getJavaMemoryStatus.sh
#!/bin/bash[ -f /tmp/java_memory_status.txt  ] && >/tmp/java_memory_status.txt 
flag=1result=`/usr/local/jdk/bin/jps|egrep -v "Jps|JarBootstrapMain|ThriftServer|unavailable|Jstat|JMap" |awk '{print $1}'`
for i in $result
dopid=$iname=`/usr/local/jdk/bin/jps|grep $i | awk '{print $2}'`grep $name /tmp/java_memory_status.txt &>/dev/nullif [ $? -eq 0 ]; thenname=$name$flagflag=$(( $flag + 1 ))	elsename=`/usr/local/jdk/bin/jps|grep $i | awk '{print $2}'`fiOCOU=`/usr/local/jdk/bin/jstat -gc $i | awk 'NR==2{print $7,$8}' `O=`/usr/local/jdk/bin/jstat -gcutil $i | awk 'NR==2{print $4}'`YGC_YGCT_FGC_FGCT=`/usr/local/jdk/bin/jstat -gcutil $i | awk 'NR==2{print $7,$8,$9,$10}'`	S0C_S1C_S0U_S0C_EC_EU=`/usr/local/jdk/bin/jstat -gc $i | awk 'NR==2{print $1,$2,$3,$4,$5,$6}' `S0Util=`/usr/local/jdk/bin/jstat -gcutil $i | awk 'NR==2{print $1}'`S1Util=`/usr/local/jdk/bin/jstat -gcutil $i | awk 'NR==2{print $2}'`echo "$name $pid $OCOU $O $YGC_YGCT_FGC_FGCT $S0C_S1C_S0U_S0C_EC_EU $S0Util $S1Util" >> /tmp/java_memory_status.txt 	
donegrep "QuorumPeerMain" /tmp/java_memory_status.txt &>/dev/null
if [ $? -eq 0 ];then
sed -i '/^QuorumPeerMain$/s/QuorumPeerMain/zookeeper/' 	/tmp/java_memory_status.txt
fi
#echo $flag

进程自动发现脚本:

[root@localhost parameter_script]# cat java_discovery.sh 
#!/bin/bash
javaProcessList=`cat /tmp/java_memory_status.txt|awk '{print $2"#"$1}'`
echo "{\"data\":["
first=1
for javaProcess in $javaProcessList;
doIFS='#' read -r -a items <<< "$javaProcess";if [ $first == 1 ]; thenecho "{\"{#JAVAPSNAME}\":\"${items[1]}\",\"{#JAVAPSPID}\":\"${items[0]}\"}";first=0elseecho ",{\"{#JAVAPSNAME}\":\"${items[1]}\",\"{#JAVAPSPID}\":\"${items[0]}\"}";fi
done;echo "]}";

获取java进程内存数据脚本:

[root@node035 parameter_script]# cat getjavastatus.sh 
#!/bin/bash
pid=`cat /tmp/java_memory_status.txt | awk '{print $2}'`
case $2 in
#old大小
OC)grep -w $1 /tmp/java_memory_status.txt |awk '{print $3}'|bc;;
#old使用大小
OU)grep -w $1 /tmp/java_memory_status.txt |awk '{print $4}'|bc;;
#old使用率
O)grep -w $1 /tmp/java_memory_status.txt |awk '{print $5}'|bc;;
# 年轻代垃圾回收次数
YGC)grep -w $1 /tmp/java_memory_status.txt |awk '{print $6}'|bc;;
# 年轻代垃圾回收消耗时间
YGCT)grep -w $1 /tmp/java_memory_status.txt |awk '{print $7}'|bc;;
# 老年代垃圾回收次数
FGC)grep -w $1 /tmp/java_memory_status.txt |awk '{print $8}'|bc;;
# 老年代垃圾回收消耗时间
FGCT)grep -w $1 /tmp/java_memory_status.txt |awk '{print $9}'|bc;;
S0C)grep -w $1 /tmp/java_memory_status.txt |awk '{print $10}'|bc;;
S1C)grep -w $1 /tmp/java_memory_status.txt |awk '{print $11}'|bc;;
S0U)grep -w $1 /tmp/java_memory_status.txt |awk '{print $12}'|bc;;
S1U)grep -w $1 /tmp/java_memory_status.txt |awk '{print $13}'|bc;;
S0Util)grep -w $1 /tmp/java_memory_status.txt |awk '{print $16}'|bc;;
S1Util)grep -w $1 /tmp/java_memory_status.txt |awk '{print $17}'|bc;;
esac	

添加配置文件,自定义监控项

UserParameter=javaps,/etc/zabbix/parameter_script/java_discovery.sh
UserParameter=javastat[*],/etc/zabbix/parameter_script/getjavastatus.sh $1 $2

重启zabbix-agent2进程

service zabbix-agent2 restart

配置计划任务

*/1 * * * * sh /data/script/monitor/getJavaMemoryStatus.sh

配置java进程自动发现

创建一个模板组:JavaProcess

 创建一个模板 JavaProcess

在 JavaProcess模板里面创建自动发现规则

 

 添加要监控的监控项原型

 给要监控的主机添加JavaProcess模板

 

zabbix会自动将发现的进程添加到对应主机

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...