1 基础说明
(1)配合的监控工具 zabbix,被监控端操作系统版本信息
操作系统:CentOS Linux release 7.4.1708 (Core)
内核版本:3.10.0-693.el7.x86_64
(2)说明:此处的脚本直接使用的是linux下进程文件的数据做计算
(3)文件内容说明:/proc/stat,/proc/pid/stat
(4)脚本计算的是java进程每秒使用的cpu量占总cpu的多少,脚本名称可以命名为 java_cpu.sh
1 #!/bin/bash 2 3 R_MON="$1" 4 5 vmrss_cpu_used() { 6 R_PID=$(ps -fe | grep "${R_MON}" | grep -v "grep" | grep "jar" | awk -F" " '{print $2}') 7 #总cpu量计算 8 CPU_ALL1=$(head -1 /proc/stat | awk -F" " '{sum=0; sum=$2+$3+$4+$5+$6+$7+$8+$9+$10+$11; print sum}') 9 #单个进程使用的cpu量计算 10 CPU_ONLY1=$(awk -F" " '{sum=0; sum=$14+$15+$16+$17; print sum}' /proc/${R_PID}/stat) 11 sleep 1 12 CPU_ALL2=$(head -1 /proc/stat | awk -F" " '{sum=0; sum=$2+$3+$4+$5+$6+$7+$8+$9+$10+$11; print sum}') 13 CPU_ONLY2=$(awk -F" " '{sum=0; sum=$14+$15+$16+$17; print sum}' /proc/${R_PID}/stat) 14 15 CPU_ONLY_VALUE=$(( ${CPU_ONLY2} - ${CPU_ONLY1} )) 16 CPU_ALL_VALUE=$(( ${CPU_ALL2} - ${CPU_ALL1} )) 17 18 #比率计算 % 19 VALUE=$(awk -v v1=${CPU_ONLY_VALUE} -v v2=${CPU_ALL_VALUE} -v v3=100 'BEGIN{printf "%.4f\n",(v1/v2)*v3}') 20 echo ${VALUE} 21 echo "$(date +%Y-%m-%d-%H-%M-%S) :: ${VALUE}" >> /usr/local/zabbix/scrip_log/java_cpu_used_${R_MON}.txt 2>&1 22 } 23 24 case $R_MON in 25 程序名称1) 26 vmrss_cpu_used "$R_MON" 27 ;; 28 程序名称2) 29 vmrss_cpu_used "$R_MON" 30 ;; 31 *) 32 echo $"USAGE:$0 {VmRSS|}" 33 esac
2 脚本使用
(1)添加在zabbix里面
echo 'UserParameter=java_cpu_totals[*],/bin/bash /usr/local/zabbix/scrip/java_cpu.sh "$1"' >> /usr/local/zabbix/etc/zabbix_agentd.conf.d/userparameter_java.conf