irpas技术客

Linux 监控统计一段时间内进程的CPU变化_qq_38781075_linux 统计进程cpu

大大的周 1864

想法

将某个进程占用的CPU写入文件中(文件名为 进程名_pid.tmp ,创建在当前目录),以时间为序,再通过Excel绘图查看 (如果是压测CPU的话最好不要满载,要到临界值而又不满载,效果最好,满载的话,进程间容易争抢CPU而看不到最真实的情况)

把下面的shell作为脚本保存到linux机器当中,运行命令为 xxx.sh 进程名 时间秒

Shell部分 #!/bin/bash # 括号前后要有空格,尤其是表达式,中间没有空格会被解析成一个字符串,表达式被看成字符串就是永真 if [ $# -lt 2 ] then echo xxx.sh 进程名 时间秒 exit fi # grep -v 后面接反向过滤的字符串,head拿到grep的第一行(如果很多进程重名),awk打印第二参数,也就是ps的进程号 pid=`ps -ef | grep $1 | grep -v grep | grep -v '/bin/bash' | head -n 1 | awk '{printf $2}'` # 变量赋值左边不能有$ tmpfile=${1}_${pid}.tmp # 判断临时文件是否被创建过,创建过就删除 if [ -e $tmpfile ] then rm -rf $tmpfile fi # 创建临时文件 touch ${1}_${pid}.tmp # 打印一个简单的表头 echo 'timestamp cpu%' >> $tmpfile # 持续时间存在remaining_time remaining_time=$2 while((remaining_time--)) do # 获取时间 time=`date +%T` # top -b -n 1 -c 即打印一次的top # awk是可以累加每行的,最后打印,多个重名进程可以把它们的CPU加起来 cpu=`top -b -n 1 -c | grep -E $1 | grep -v grep | awk '{ sum_cpu+=$9; } END { printf ("%8.2f%", sum_cpu) }'` echo $time' '$cpu >> $tmpfile sleep 1 done 遇到的问题:

运行脚本报错:syntax error: unexpected end of file

目前遇到两种可能:1、格式有误,比如if的结尾没有用fi。2、windows和linux的 \r \n问题,需要手动设置,如:vi下输入?:set ff=unix?,我用notepad++可以设置文本编辑格式为linux

shell参考资料

字符串拼接

Shell 字符串拼接_小白的进阶的博客-CSDN博客_shell字符串拼接

linux时间获取

Linux系统date命令的参数及获取时间戳的方法 - 唐世光 - 博客园

if判断语句

Shell if 条件判断_诗歌poetry的博客-CSDN博客

?自增运算

shell编程之自增自减运算符_永远不要矫情的博客-CSDN博客_shell 自减

Excel部分

我是notepad++和wps一起使用的

步骤

先打开创建的文件(前面shell会创建一个文件名为 进程名_pid.tmp的文件),按住alt键手动选择一整列,然后ctrl + c

接着创建一个Excel表格,单击其中的一个方格(注意不是双击)

然后ctrl + v 粘贴,如图

在wps里选择插入,折线图(要先框选我们要做图表的数据)

就能得到我们的折线图(当然Excel还可以求平均值等操作,这里就不细说了)


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Linux #统计进程cpu #lt #2