Linux进程及其子进程读取/写入的总字节数

时间:2012-01-13 14:29:11

标签: linux io process-accounting

我想打印Linux进程读取/写入的总字节数。例如,我运行

gcc -c a.c

并希望看到GCC(包括其子代)从Linux内核请求了多少字节以及它们发送到内核的字节数。

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

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

  • strace之类的工具可用于打印进程及其子进程的系统调用(例如:readwrite系统调用),但它是无法聚合读/写的字节数。

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

2 个答案:

答案 0 :(得分:10)

有点笨蛋,而且你想要的就是strace。

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

为您提供读写系统调用的日志。现在你可以把这个日志和这样的最后一列相加

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

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

答案 1 :(得分:1)

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

编辑:

您还可以查看sysstat,它看起来非常强大,可用于监控Linux机箱。根据文件:

  

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

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

在这里你会找到some examples of usage的sar(sysstat包的主要命令)。