某些时候,我们需求有针对性的健康单个进程的cpu和内存使用情况,并且能自动绘制出折线图,这是用psrecord应该算是一个比较好的选择。
只要系统能访问pip,部署也相对比较简单
python3 -m pip install --upgrade pip
python3 -m pip install matplotlib
python3 -m pip install psrecord
使用方法
psrecord 290752 --log activity.txt --plot plot.png --interval 10 --include-children --duration 21600
290752 是我们要监控的进程ID
--log 指定输出的文本监控信息文件名
--plot指定绘制的折线图文件名
--interval指定采样间隔
--duration指定采样总时长,注意这里是总时长,不是采样个数
--include-children是否包含子进程,如果是多线程的程序,建议加上这个选项
默认终端模式下执行,使用Ctrl+C便可以结束监控,然后自动生成png图像
后台监控和停止操作
采集运行时间较长的进程信息时,我们更可能希望是在后台运行,然后在需要的时候结束,此时可以将监控指令写到shell中,然后通过nohup &的方式运行,注意命令里面无需添加&,如果有多个进程,就傻瓜式的多写几个shell,例如这样:
ps -ef | grep 3306 | grep -w mysqld | grep -v grep | head -1 | awk '{print $2}' | xargs -i psrecord {} --log 3306.txt --plot 3306.png --interval 60 --include-children
运行之后,如果需要人工控制停止时间,就发kill -2信号
ps -ef | grep -v grep | grep psrecord | awk '{print $2}' | xargs kill -2
上面提到不要在shell中使用&功能,因为这种方式执行shell拉起的监控任务,无法使用kill -2正常结束,也就意味着不能自动输出png图