我正在使用 Linux“top”命令来监视特定进程的 CPU 百分比。由于值每隔几秒就会不断变化,有什么方法可以在单独的文件中或以图形表示形式跟踪值?是否可以使用任何 shell 脚本来完成此操作?
答案1
这个问题的答案可以是简单的命令,也可以是复杂的监控工具,具体取决于您的需求。
您可以从简单地运行top -b -n 1 >> file.txt
(-b 表示批处理模式,-n 1 表示运行 top 的单次迭代)开始,并将输出(附加)存储在 file.txt 中。您还可以过滤“top”输出,例如top -b -n 1 | grep init
仅查看“init”进程的数据或top -b -n 1 | grep "init" | head -1 |awk '{print $9}'
获取 init 进程数据的第 9 列(CPU 值)。
如果你想在 shell 脚本中使用,你可以:
CPU=$(top -b -n1 | grep "myprocess" | head -1 | awk '{print $9}')
MEM=$(top -b -n1 | grep "myprocess" | head -1 | awk '{print $10}')
或者,只需执行一次 top:
read CPU MEM <<<$(top -b -n1 | grep "myprocess" | head -1 | awk '{print $9 " " $10}')
(请注意,grep、head 和 awk 可以合并在一个 awk 命令中,但为了简单起见,我使用单独的命令)。
我们在本例中使用了 top ,但还有其他指标的替代方法(检查、、、、、甚至sar
读取/proc/*)。iostat
vmstat
iotop
ftop
现在您可以访问数据(CPU 使用率)。在我们的示例中,我们将其附加到文本文件中。但是您可以使用其他工具来存储数据,甚至绘制它们的图表:使用 gnuplot/python/openoffice 存储在 csv 和图表中,使用 zabbix、rrdtools、cacti 等监控和绘图工具。收集并绘制图表,如 CPU 使用率、内存使用率、磁盘 io,甚至自定义指标(mysql 连接数等)。
编辑:最后,为了具体回答您的问题,如果您想轻松跟踪更改以进行简单测试,您可以top -b -n 1 >> /tmp/file.txt
在 /etc/crontab 文件中运行,每 5 分钟运行一次 top (或任何其他时间间隔,如果您替换下面的 /5)。
0-59/5 * * * * root top -b -n1 >>/tmp/output.txt
(如果您只对单个进程数据感兴趣,则在上面的命令中使用 grep + head -1 )。
请注意,output.txt 会增长,因此如果您想每天或每周重置它,您可以使用另一个 crontab 条目“rm”它。
答案2
您可以使用ps -o pid,pcpu $(pgrep particular-process) >> file
。定期运行它。