linux监控java进程的cpu和线程快照脚本

java进程的cpu和线程快照一般都会接入监控平台进行监控和查看,也可以通过命令在服务器查看:top -b -n 1 -Hp pid > 1.top && jstack pid > 1.stack,当然也可以通过shell脚本的方式将cpu和jstack指标记录输出到文件。

if [ ! -d "result" ]; then mkdir result; fi
num=1;
prefix=`date -d "today" +"%H%M%S"`;   #文件前缀
while true; do
        realCpu=`top -b -n 5 -d 1 -Hp $1 | grep Cpu | tail -1 | awk '{print $2}'`    #每隔1秒输出一次top,连续5次,取最后一次判断CPU,耗时5秒
        printf $(date -d "today" +"%Y%m%d.%H:%M:%S")" CPU: "$realCpu;
        CpuStatus=`echo $realCpu | awk '{if($0 > 70 ) print "high"; else print "low"}'`;    #注意这里设置阈值,阈值是80%
        if [ $CpuStatus == "high" ]; then 
                printf ", 大于80,开始采集10分钟堆栈..."
                for ((i=1;i<=120;i++)); do
                                                top -b -n 5 -d 1 -Hp $1 > top.tmp & sar -u 1 5 >> ./result/$prefix-"sar-cpu"-$(date -d "today" +"%Y%m%d").txt & sar -r 1 5 >> ./result/$prefix-"sar-memory"-$(date -d "today" +"%Y%m%d").txt & sar -b 1 5 >> ./result/$prefix-"sar-io"-$(date -d "today" +"%Y%m%d").txt & sar -B 1 5 >> ./result/$prefix-"sar-swap"-$(date -d "today" +"%Y%m%d").txt;    #并发执行top和sar命令,都是每个1秒执行一次,连续5次,sar采集了CPU、内存、IO、页交换速率四项
                                                lastLine=`grep -n "top -" top.tmp | tail -1 |awk -F ':' '{print $1}'`;
                        echo $lastLine | xargs -I {} sed -n '{},$p' top.tmp > ./result/$prefix-$num-"top"-$(date -d "today" +"%Y%m%d_%H%M%S").txt && jstack $1 > ./result/$prefix-$num-"stack"-$(date -d "today" +"%Y%m%d_%H%M%S").txt;
                        num=$(($num+1));
                done
        fi
                printf "\n";
        find ./result/ -mmin +300 -type f -exec rm -rf {} \;   #删除5小时前修改的文件
done

使用说明:

chmod 777 top.sh (上面的脚本);执行nohup ./top.sh pid & 
如果打堆栈的话会在当前目录下面新建result文件夹,只保留1天的;
如果有重启java进程的话这个脚本也需要重启,因为pid改变了。

固定频率打线程快照脚本
#!/bin/bash

pid=$1

# 创建保存日志文件的目录
log_dir="/opt/jstack"
mkdir -p $log_dir

# 循环执行并保存堆栈信息
while true; do
    current_time=$(date +%Y%m%d%H%M%S)
    jstack -l $pid > "$log_dir/$current_time.txt"
    find /opt/jstack/*.txt -mmin +2880 -type f -exec rm -rf {} \;
    sleep 5
done
其他
sftp服务io性能测试
yum install time
sync;/usr/bin/time -p bash -c "(dd if=/dev/mapper/centos-root of=test.dd  bs=1000K count=20000;sync)"

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值