我知道我可以用来top
查看总体实时 CPU 和内存使用情况,
以及nload
总体实时带宽使用情况。
但我希望查看程序运行后的最大(或平均)CPU、内存和带宽使用情况。
就像time my_command
程序时间花费估算中所做的那样。
在 Linux/Unix 中有一个简单的方法可以做到这一点吗?
答案1
如果系统支持进程记帐,并且启用了记帐,则进程记帐文件中可能有可用的记录,例如在 RedHat Linux 上:
$ grep -q BSD_PROCESS_ACCT=y /boot/config-* && echo hooray
hooray
$ sudo touch /var/log/pacct
$ sudo accton /var/log/pacct
$
...
$ sudo accton # turn it off
解析acct(5)
文件留给读者作为练习。
然而,这是全局的,因此可能不适合新进程创建负载较重的系统。对于每个进程,getrusage(2)
调用应该生成 CPU 和内存统计信息,可能通过带有标志的包装器RUSAGE_CHILDREN
来报告您感兴趣的子进程。
网络带宽可能更难获得,尤其是在每个进程的基础上。
其他工具,例如 DTrace 或追踪可能也会感兴趣。