最近工作中,需要对开发的程序进行性能测试,记录该进程的cpu、磁盘占用的等信息,并能够将该信息保存到文件中,便于后续查询和分析,于是编写了个脚本,适应linux系统,验证环境为ubuntu。
获取进程的pid信息指令为:
#name为进程的名称
pid=$(pidof name)
之前的博客里面有写道查询进程的信息指令为:
#pid为进程的id
top -p pid
单次信息输入到文件中(信息会覆盖),也可使用下面的指令:
#name为进程的名称
top -n 1 -b |grep -E name >status_monitor$(date -d “today” +“%Y%m%d_%H%M%S”).txt
后面考虑到更适用,将定时进行查询,完整的脚本如下:
#!/bin/bash
#输出到status_monitor.txt文件中,信息追加,非覆盖
#获取进程名称,外部输入
process=$1
#获取对应进程的pid
pid=$(pidof $process)
#写入相关提示信息
echo $process $pid >>status_monitor.txt
echo " PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND" >>status_monitor.txt
#周期性查询信息并追加到status_monitor.txt文件中
while true
do
top -bn1 -n 1 -p $pid | tail -1 >>status_monitor.txt
#top -n 1 -b |grep -E $process >>status_monitor.txt
#sleep后面的数字单位为秒,下面为30s查询一次
sleep 30
done
修改定制化了一个脚本:
#!/bin/bash
#输入:进程名称
#输出:进程名称对应pid的top信息,输出到logFileName文件中,信息追加,非覆盖
#使用方法:./GetTopInfo.sh processName
#获取进程名称,外部输入
process=$1
#log文件名称
logFileName="status_monitor_"$(date -d "today" +"%Y%m%d_%H%M%S")".txt"
echo "log file:" ${logFileName}
#获取对应进程的pid
pid=$(pidof $process)
echo "process name:" ${process} ",pid:" ${pid}
#写入相关提示信息
echo $process $pid >>${logFileName}
echo " PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND" >>${logFileName}
#周期性查询信息并追加到logFileName文件中
while true
do
top -bn1 -n 1 -p $pid | tail -1 >>${logFileName}
#top -n 1 -b |grep -E $process >>status_monitor.txt
#sleep后面的数字单位为秒,下面为2s查询一次
sleep 2
done
若该脚本保存为process_monitor.sh,监测test进程时,使用如下指令:
./process_monitor.sh test
————————————————
版权声明:本文为CSDN博主「浪小满」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/langxm2006/article/details/123011323