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