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

news/2024/11/8 20:52:50/

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

#每隔5秒钟检测一下CPU,当超过90的时候连续采集10分钟的top、stack、cpuinfo、iostat
if [ ! -d "result" ]; then mkdir result; fi
num=1;
prefix=`date -d "today" +"%H%M%S"`;   #文件前缀
while true; dorealCpu=`top -b -n 1 -Hp $1 | sed -n '3,3p' | awk '{print $2}'`printf $(date -d "today" +"%Y%m%d.%H:%M:%S")" CPU: "$realCpu;CpuStatus=`echo $realCpu | awk '{if($0 > 90 ) print "high"; else print "low"}'`;    #注意这里设置阈值if [ $CpuStatus == "high" ]; thenprintf ", 大于90,开始采集10分钟堆栈..."for ((i=1;i<=120;i++)); dotop -b -n 1 -Hp $1 > ./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 && cat /proc/cpuinfo > ./result/$prefix-$num-"cpuinfo"-$(date -d "today" +"%Y%m%d_%H%M%S").txt && iostat -x > ./result/$prefix-$num-"iostat"-$(date -d "today" +"%Y%m%d_%H%M%S").txt;num=$(($num+1));if [ $i -lt 120 ]; then sleep 5; fidonefiprintf "\n";find ./result/ -cmin +1440 -type f -exec rm -rf {} \;   #删除24小时前的文件sleep 5;
if [ ! -d "result" ]; then mkdir result; fi
num=1;
prefix=`date -d "today" +"%H%M%S"`;   #文件前缀
while true; dorealCpu=`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 > 90 ) print "high"; else print "low"}'`;    #注意这里设置阈值,阈值是90%if [ $CpuStatus == "high" ]; then printf ", 大于90,开始采集10分钟堆栈..."for ((i=1;i<=120;i++)); dotop -b -n 5 -d 1 -Hp $1 > top.tmp;    #每隔1秒输出一次top,连续5次,耗时5秒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));donefiprintf "\n";find ./result/ -cmin +300 -type f -exec rm -rf {} \;   #删除5小时前的文件
done

使用说明:

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


http://www.ppmy.cn/news/1007868.html

相关文章

python入门常用操作

python常用操作 1、ndarry数组的切片2、print用法2.1格式化输出format2.2字符串格式化输出 3、均值滤波函数 1、ndarry数组的切片 例如一个5列的ndarry数组&#xff0c;想要获取第2列和第3列数据&#xff0c;可以用 #&#xff08;1&#xff09;用法1 data[:,1:3]&#xff0c;…

dijkstra算法相关(使用邻接表和优先队列两种方法)力扣题:743. 网络延迟时间(有向图);1334. 阈值距离内邻居最少的城市(无向图)

具体dijkstra算法就不展开说了&#xff0c;因为太多帖子来解释了&#xff0c;并且这也只是我的个人总结/记录&#xff0c;我会把自己的思考过程写在代码的注释中。 743. 网络延迟时间&#xff08;有向图&#xff09; 有 n 个网络节点&#xff0c;标记为 1 到 n。 给你一个列…

java多线程并发面试题总结(史上最全40道)

1、多线程有什么用&#xff1f; 一个可能在很多人看来很扯淡的一个问题&#xff1a;我会用多线程就好了&#xff0c;还管它有什么用&#xff1f;在我看来&#xff0c;这个回答更扯淡。所谓"知其然知其所以然"&#xff0c;"会用"只是"知其然"&am…

数据结构--动态顺序表

文章目录 线性表动态顺序表数组与顺序表 接口实现初始化&#xff1a;尾插&#xff1a;尾删头插头删指定位置插入指定位置删除查找摧毁 完整代码 线性表 线性表是数据结构中最基本、最简单也是最常用的一种数据结构。线性表是指由n个具有相同数据类型的元素组成的有限序列。 线…

认识FFMPEG框架

FFMPEG全称: Fast Forward Moving Picture Experts Group (MPEG:动态图像专家组) ffmpeg相关网站: git://source.ffmpeg.org/ffmpeg.git http://git.videolan.org/?pffmpeg.git https://github.com/FFmpeg/FFmpeg FFMPEG框架基本组件: AVFormat , AVCodec, AVDevice, AVFil…

【测试学习五】测试类型的划分(重点:白盒与黑盒测试)

目录 一、测试类型的分类 1、按测试对象划分 2、是否查看代码划分&#xff08;重点&#xff09; &#x1f337;&#xff08;1&#xff09;黑盒测试 &#x1f337;&#xff08;2&#xff09;白盒测试 &#x1f337;&#xff08;3&#xff09;灰盒测试 3、按照开发阶段划…

关于cherry-pick的小实验

背景 好奇&#xff1a; 当前代码处于commit c1&#xff0c;分别拉出a、b两分支&#xff0c;切换到a分支&#xff0c;新增加一行信息&#xff0c;提交&#xff0c;得到c2&#xff0c;再在修改上一步所增加那行信息&#xff0c;得到c3。 此时a分支处于c3&#xff0c;b分支处于c…

【随笔记】Linux/Win 平台调用外部命令并获取执行结果

Linux&#xff1a; 有些命令输出结果并不是通过 ”标准输出“&#xff0c;而是通过 "错误输出"&#xff0c;因此为了能获取到所有的执行结果&#xff0c;需要将 "错误输出" 重定向 "标准输出"。 bool runShellCommand(std::string &result…