Show Table of Contents
2.3. Diskdevstat 和 Netdevstat
Diskdevstat 和 netdevstat 都属于 SystemTap 工具,它们的功能是搜集系统上运行的所有应用程序的磁盘和网络活动的详细信息。这些工具的灵感来自于 PowerTOP,PowerTOP 可显示每个应用程序每秒唤醒 CPU 的次数(请参阅〈第 2.2 节 “PowerTOP”〉)。这些工具收集的统计数据可让您识别那些使用大量的小型 I/O 操作的应用程序,这种应用程序比少量的较大操作更耗电。其它的监控工具只测量传输速度,无法帮助分辨此类使用量。
使用 SystemTap 来安装这些工具,请以
root 身份执行以下指令:
yum install tuned-utils-systemtap kernel-debuginfo
使用以下命令运行这些工具:
diskdevstat
或使用以下命令运行这些工具:
netdevstat
这两个命令都可以接受三个参数,分别为:
diskdevstat update_interval total_duration display_histogram
netdevstat update_interval total_duration display_histogram
- update_interval
- 显示更新的时间间隔,以秒为单位。默认值:
5 - total_duration
- 整体运行时间,以秒为单位。默认值:
86400(一天) - display_histogram
- 是否在运行结束时将收集的所有数据以柱形图显示的标志。
输出结果和 PowerTOP 的结果类似。以下是在使用 KDE 4.2 的 Fedora 10 系统上运行 diskdevstat 的输出结果示例:
PID UID DEV WRITE_CNT WRITE_MIN WRITE_MAX WRITE_AVG READ_CNT READ_MIN READ_MAX READ_AVG COMMAND 2789 2903 sda1 854 0.000 120.000 39.836 0 0.000 0.000 0.000 plasma 15494 0 sda1 0 0.000 0.000 0.000 758 0.000 0.012 0.000 0logwatch 15520 0 sda1 0 0.000 0.000 0.000 140 0.000 0.009 0.000 perl 15549 0 sda1 0 0.000 0.000 0.000 140 0.000 0.009 0.000 perl 15585 0 sda1 0 0.000 0.000 0.000 108 0.001 0.002 0.000 perl 2573 0 sda1 63 0.033 3600.015 515.226 0 0.000 0.000 0.000 auditd 15429 0 sda1 0 0.000 0.000 0.000 62 0.009 0.009 0.000 crond 15379 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15473 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15415 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15433 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15425 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond 15375 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15477 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond 15469 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond 15419 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 15481 0 sda1 0 0.000 0.000 0.000 61 0.000 0.001 0.000 crond 15355 0 sda1 0 0.000 0.000 0.000 37 0.000 0.014 0.001 laptop_mode 2153 0 sda1 26 0.003 3600.029 1290.730 0 0.000 0.000 0.000 rsyslogd 15575 0 sda1 0 0.000 0.000 0.000 16 0.000 0.000 0.000 cat 15581 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl 15582 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl 15579 0 sda1 0 0.000 0.000 0.000 12 0.000 0.001 0.000 perl 15580 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl 15354 0 sda1 0 0.000 0.000 0.000 12 0.000 0.170 0.014 sh 15584 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl 15548 0 sda1 0 0.000 0.000 0.000 12 0.001 0.014 0.001 perl 15577 0 sda1 0 0.000 0.000 0.000 12 0.001 0.003 0.000 perl 15519 0 sda1 0 0.000 0.000 0.000 12 0.001 0.005 0.000 perl 15578 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl 15583 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl 15547 0 sda1 0 0.000 0.000 0.000 11 0.000 0.002 0.000 perl 15576 0 sda1 0 0.000 0.000 0.000 11 0.001 0.001 0.000 perl 15518 0 sda1 0 0.000 0.000 0.000 11 0.000 0.001 0.000 perl 15354 0 sda1 0 0.000 0.000 0.000 10 0.053 0.053 0.005 lm_lid.sh
这些列代表:
- PID
- 应用程序的进程 ID
- UID
- 运行中的应用程序用户 ID
- DEV
- 发生 I/O 的装置
- WRITE_CNT
- 写入操作总数
- WRITE_MIN
- 两次连续写入所需最短时间(以秒为单位)
- WRITE_MAX
- 两次连续写入所需最长时间(以秒为单位)
- WRITE_AVG
- 两个连续写入操作所需平均时间(以秒为单位)
- READ_CNT
- 读取操作总数
- READ_MIN
- 两次连续读取所需最短时间(以秒为单位)
- READ_MAX
- 两次连续读取所需最长时间(以秒为单位)
- READ_AVG
- 两次连续读取所需平均时间(以秒为单位)
- COMMAND
- 进程名称
在这个示例中,可看到三个非常明显的应用程序:
PID UID DEV WRITE_CNT WRITE_MIN WRITE_MAX WRITE_AVG READ_CNT READ_MIN READ_MAX READ_AVG COMMAND 2789 2903 sda1 854 0.000 120.000 39.836 0 0.000 0.000 0.000 plasma 2573 0 sda1 63 0.033 3600.015 515.226 0 0.000 0.000 0.000 auditd 2153 0 sda1 26 0.003 3600.029 1290.730 0 0.000 0.000 0.000 rsyslogd
这三个应用程序的
WRITE_CNT 都大于 0,这意味着它们在测量期间都执行了一些写入操作。其中,plasma 最严重:它执行的写入操作最多,当然写入操作平均间隔时间就最短。如果您想找到最耗电的应用程序,那么 Plasma 就是最佳的观察对象。
请使用 strace 和 ltrace 命令,通过追踪所有给定进程 ID 的系统调用,对应用程序进行进一步检查。在这个示例中,您可以运行:
strace -p 2789
在这个示例中,
strace 的输出结果中包含一个每 45 秒重复一次的模式,该模式会打开用户的 KDE 图标缓冲文件,接着写入,然后马上关闭该文件。这导致必需在硬盘上进行物理写入,因为文件原数据已经改变了(更准确地说是时间被修改了)。最终修复是为了避免在没有图标更新时进行不必要的调用。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.