我想打印Linux进程读取/写入的总字节数。例如,我运行
gcc -c a.c
并希望看到GCC(包括其子代)从Linux内核请求了多少字节以及它们发送到内核的字节数。
此问题的不完整解决方案是:
rchar
中的字段wchar
和/proc/PID/io
显示到目前为止的读/写字节数。它不考虑子进程。一旦流程终止,它就会丢失。
strace
之类的工具可用于打印进程及其子进程的系统调用(例如:read
,write
系统调用),但它是无法聚合读/写的字节数。
如何打印Linux进程及其子进程读取/写入的总字节数?
答案 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机箱。根据文件:
可以监控大量不同的指标:
- 输入/输出和传输速率统计信息(全局,每个设备,每个分区,每个网络文件系统和每个Linux任务/ PID)。
- CPU统计信息(全局,每CPU和每个Linux任务/ PID),包括对虚拟化架构的支持。
- 内存,大页面和交换空间利用率统计信息。
- 虚拟内存,分页和故障统计。
- 每任务(每PID)内存和页面错误统计信息。
- 任务及其所有子项的全局CPU和页面错误统计信息。
- 流程创建活动。
- 中断统计信息(全局,每个CPU和每个中断,包括潜在的APIC中断源,硬件和软件中断)。
- 广泛的网络统计:网络接口活动(每秒接收和发送的数据包数和kB数等),包括 来自网络设备的故障; IP,TCP的网络流量统计 基于SNMPv2标准的ICMP和UDP协议;支持 与IPv6相关的协议。
- NFS服务器和客户端活动。
- 套接字统计信息。
- 运行队列和系统负载统计信息。
- 内核表利用率统计信息。
- 系统和每个Linux任务切换活动。
- 交换统计信息。
- TTY设备活动。
- 电源管理统计(瞬时和平均CPU时钟频率,风扇速度,设备温度,电压输入,USB 插入系统的设备)。
醇>
在这里你会找到some examples of usage的sar(sysstat包的主要命令)。