6

我想打印 Linux 进程读/写的字节总数。例如,我跑

gcc -c a.c

并且想看看GCC(包括它的子代)总共向Linux内核请求了多少字节,以及它们向内核发送了多少字节。

此问题的不完整解决方案是:

  • 字段rcharwcharin/proc/PID/io显示到目前为止读取/写入的字节数。它不考虑子进程。一旦进程终止,它就会丢失。

  • 诸如此类的工具strace可用于打印出进程及其子进程的系统调用(例如:readwrite系统调用),但它无法汇总读取/写入的字节数。

如何打印Linux进程及其子进程读/写的总字节数?

4

2 回答 2

10

有点 awk 和 strace 是你想要的。

strace -e trace=read,write -o ls.log ls

为您提供读取和写入系统调用的日志。现在您可以获取此日志并像这样对最后一列求和

cat ls.log | grep read | awk 'BEGIN {FS="="}{ sum += $2} END {print sum}'

您可能不想更改 grep 以仅匹配行首的读取。

于 2012-01-13T15:52:56.190 回答
2

你可以看看iotop,它是一个类似于 top 的工具,可以显示每个进程的磁盘消耗(实时和总写入和读取)。

编辑:

您还可以检查sysstat,它看起来非常强大,可用于监控 linux 机器。根据文档:

可以监控大量不同的指标:

  1. 输入/输出和传输速率统计(全局、每个设备、每个分区、每个网络文件系统和每个 Linux 任务/PID)。
  2. CPU 统计信息(全局、每个 CPU 和每个 Linux 任务/PID),包括对虚拟化架构的支持。
  3. 内存、大页面和交换空间利用率统计信息。
  4. 虚拟内存、分页和故障统计。
  5. 每任务 (per-PID) 内存和页面错误统计信息。
  6. 任务及其所有子任务的全局 CPU 和页面错误统计信息。
  7. 流程创建活动。
  8. 中断统计(全局、每个 CPU 和每个中断,包括潜在的 APIC 中断源、硬件和软件中断)。
  9. 广泛的网络统计:网络接口活动(每秒接收和传输的数据包数和 kB 等),包括来自网络设备的故障;基于 SNMPv2 标准的 IP、TCP、ICMP 和 UDP 协议的网络流量统计;支持 IPv6 相关协议。
  10. NFS 服务器和客户端活动。
  11. 套接字统计信息。
  12. 运行队列和系统负载统计。
  13. 内核内部表利用率统计信息。
  14. 系统和每个 Linux 任务切换活动。
  15. 交换统计。
  16. TTY 设备活动。
  17. 电源管理统计数据(瞬时和平均 CPU 时钟频率、风扇速度、设备温度、电压输入、插入系统的 USB 设备)。

在这里,您将找到一些使用sar(sysstat 包的主命令)的示例。

于 2012-01-13T14:54:33.110 回答