![有没有一种简单的方法可以查看程序运行后的最高资源使用情况(CPU、内存甚至带宽)?](https://linux22.com/image/72098/%E6%9C%89%E6%B2%A1%E6%9C%89%E4%B8%80%E7%A7%8D%E7%AE%80%E5%8D%95%E7%9A%84%E6%96%B9%E6%B3%95%E5%8F%AF%E4%BB%A5%E6%9F%A5%E7%9C%8B%E7%A8%8B%E5%BA%8F%E8%BF%90%E8%A1%8C%E5%90%8E%E7%9A%84%E6%9C%80%E9%AB%98%E8%B5%84%E6%BA%90%E4%BD%BF%E7%94%A8%E6%83%85%E5%86%B5%EF%BC%88CPU%E3%80%81%E5%86%85%E5%AD%98%E7%94%9A%E8%87%B3%E5%B8%A6%E5%AE%BD%EF%BC%89%EF%BC%9F.png)
我知道我可以用来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 或追踪可能也会感兴趣。