#!/bin/bash
now=`date -u -d"+8 hour" +'%Y-%m-%d-%H-%M-%S'`
log_dir=/usr/local/yunji/logs/sysmonitor
log_file=$log_dir"/sysmonitor-$now".log
cpu_warn='0'
mem_warn='1'
disk_warn='90'
if [ ! -d $log_dir ];then
mkdir -p $log_dir
fi
monitor_core_func(){
echo -e "\n1、top10进程明细:" >> $log_file
ps -eo user,pid,pcpu,pmem,vsz,rss,stat,start,time,command --sort=-pcpu |head -n 10 >> $log_file
for pid in `ps -eo user,pid,pcpu,pmem,vsz,rss,stat,start,time,command --sort=-pcpu |head -n 10 | grep "java" | grep "applicationName" |awk '{print $2}'`; do
echo -e "\n2、Java进程对应的线程使用明细:" >> $log_file
ps p $pid -L -o pcpu,pmem,pid,tid,time,tname,cmd >> $log_file
echo -e "\n3、Java进程对应的线程堆栈信息:" >> $log_file
jstack -l $pid >> $log_file
echo -e "\n4、输出GC信息:" >> $log_file
jstat -gc $pid | sed -n '1,5p' >> $log_file
jstat -gcutil $pid | sed -n '1,5p' >> $log_file
echo -e "\n4、输出内存dump信息:" >> $log_file
echo -e "请查看文件:$log_dir/dump_$pid.bin" >> $log_file
jmap -dump:live,format=b,file="$log_dir/dump_$pid".bin $pid
done
}
item_cpu () {
cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $8}'|cut -f 1 -d "."`
cpu_use=`expr 100 - $cpu_idle`
echo "$now 当前Cpu利用率为:$cpu_use" >> $log_file
if [ $cpu_use -gt $cpu_warn ]
then
echo "CPU超过阀值,请及时处理,明细如下:" >> $log_file
monitor_core_func
json='{"msg_type":"post","content":{"post":{"zh_cn":{"title":"monitor","content":[[{"tag":"text","text":"test cpu warning'${cpu_use}'"}]]}}}}'
curl -X POST -H "Content-Type: application/json" -d "$json" http
else
echo "cpu ok!!!"
fi
}
item_mem () {
mem_free=`free -m | grep "Mem" | awk '{print $4+$6}'`
echo "$ now the current memory space remaining $ {mem_free} MB" >> /opt/mem.log
if [ $mem_free -lt $mem_warn ]
then
echo "内存使用率小于阀值,请及时处理,明细如下:" >> $log_file
monitor_core_func
json='{"msg_type":"post","content":{"post":{"zh_cn":{"title":"monitor","content":[[{"tag":"text","text":"test cpu warning'${cpu_use}'"}]]}}}}'
curl -X POST -H "Content-Type: application/json" -d "$json" http
else
echo "mem ok!!!"
fi
}
item_disk () {
disk_use=`df -P | grep /dev | grep -v -E '(tmp|boot)' | awk '{print $5}' | cut -f 1 -d "%"`
echo "$ now current disk usage is $ disk_use" >> /opt/disk.log
if [ $disk_use -gt $disk_warn ]
then
echo "disk warning!!!"
else
echo "disk ok!!!"
fi
}
item_cpu
item_mem
item_disk