我该如何在Linux中对一个进程进行基准测试?我需要像“top”和“time”结合在一起的东西来针对特定进程名称进行测试(它是一个多进程程序,因此会给出许多PIDs)?
此外,我想要随时间绘制这些进程的内存和CPU使用情况图表,而不仅仅是最终数字。
有任何想法吗?
我该如何在Linux中对一个进程进行基准测试?我需要像“top”和“time”结合在一起的东西来针对特定进程名称进行测试(它是一个多进程程序,因此会给出许多PIDs)?
此外,我想要随时间绘制这些进程的内存和CPU使用情况图表,而不仅仅是最终数字。
有任何想法吗?
我通常会编写一个简单的脚本来完成这种工作。
查看内核文档中有关proc文件系统的相关信息(在Google搜索“linux proc.txt”)。
/proc/stat
文件的第一行(proc.txt的1.8节)将为您提供累积CPU使用情况统计信息(例如用户、优先级、系统、空闲等)。对于每个进程,文件/proc/$PID/stat
(proc.txt的表1-4)将为您提供特定进程的CPU使用情况和内存使用情况统计信息(请参见rss)。
如果您进行谷歌搜索,您会发现大量关于这些文件的详细信息,以及获取/推导所需值的库/应用程序/代码片段的指针。考虑到这一点,我将重点介绍高级策略。
对于CPU统计信息,请使用您喜欢的脚本语言创建一个可执行文件,用于监视一组进程ID。在固定间隔(例如1秒)内轮询/计算每个进程和整个系统的累积总数。在每个轮询间隔期间,将所有结果写入单行并输出到stdout。
对于内存统计信息,请编写类似的脚本,但仅记录每个进程的内存使用情况。内存稍微容易一些,因为我们可以直接获取瞬时值。
在测试期间运行这些脚本,传递您要监视的进程ID集并将其输出重定向到日志文件。
./logcpu $(pidof foo) $(pidof bar) > cpustats
./logmem $(pidof foo) $(pidof bar) > memstats
top
、free -m
、vmstat
、iostat
、iotop
、sar
、netstat
等。当您在调试问题时,没有任何其他工具比这些Linux实用程序更好。这些命令可以为您提供一个清晰的图像,了解服务器内部发生的情况。