Ubuntu --- indicator-sysmonitor 状态栏监控工具开启对磁盘读写的监控
背景
indicator-sysmonitor 默认的模式可以监控 CPU 使用率, 内存使用, 网络 I/O 等, 但是却缺少了很关键的对当前磁盘 I/O 的监控,于是我就想着把他给加上去
解决方式
indicator-sysmonitor 可以新建传感器,可以自定义命令来显示输出, 于是我想着使用 shell 命令获取当前磁盘的 I/O 在输出即可
dstat 方式
- 使用
dstat
命令, 需要机器上事先安装dstat
1 | dstat --disk |
该命令可以监控磁盘使用情况
我在稍对结果做下过滤的优化, 使用下面的命令
1 | dstat --disk 1 1 | sed -n '4p' | awk '{printf "r: "}{printf $1}{printf " w: "}{printf $2}' |
上述的命令的解释为 1s 输出一次, 一次输出一行, 取第四行, 取第一列和第二列,在加上读写的标识 r:
和 w:
的前缀
输出的结果为:
1 | r: 0 w: 6244kj |
在 indicator-sysmonitor 里新建一项, 复制上述命令,效果如下
iotop
- 使用
iotop
命令, 需要机器上事先安装iotop
1 | sudo iotop |
在美化下输出结果:
1 | sudo iotop -o -b -n 1 | sed -n '2p' | awk '{printf "r: "}{printf $4 $5}{printf " w: "}{printf $10 $11}' |
命令的意思同上
输出的结果为:
1 | r: 0.00B/s w: 0.00B/s |
同上操作, 命令更换下,效果如下:
对比
- 输出单位不一样,第一种方式单位只有 k,m 这样的, 第二种是 B/s, KB/s, MB/s 这样的, 不过第一种方式的单位也可以手动给补全上
- 第一种方式
dstat
命令不需要 root 权限即可执行, 第二种方式iotop
命令需要 root 权限即需要加sudo
使用 sudo 的常用方式为:
1 | echo "你的 root 的密码" | sudo iotop .... |
但是这样的方式在终端执行可以输出结果, 在 indicator-sysmonitor 执行却不能输出结果。。。。。
于是需要解决这个问题, 即使用普通用户执行 iotop
命令时不需要输入密码
这里我的解决方案如下:
1 | sudo visudo |
Ctrl + O
保存后,普通用户 joylau 使用 sudo iotop
就不需要输入密码了, 也就实现了第二种方式的效果了
- 性能对比: 实测第一种方式的性能(CPU使用平均在 2%)要稍好于第二种(CPU使用平均在 5%)