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

问题描述 投票:0回答:2

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

gcc -c a.c

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

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

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

  • 诸如

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

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

linux io process-accounting
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 以仅匹配行开头的读取内容。


2
投票

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

编辑:

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.