工具
Web 开发
Web 服务
Linux 系统监控
磁盘
找出占用磁盘最大的 10 个日志文件:
$ sudo du -ha /var/log/ | sort -hr | head
Linux 查看当前路径下所有文件的占用大小:
$ du -h --max-depth 1 | sort -h
macOS 查看当前路径下所有文件的占用大小(du 限制深度参数为 -d
,且 sort 没有 -h
选项):
$ du -d1 | sort -nk1
iostat
检查磁盘使用情况 - 来自 sysstat 安装包的 iostat 命令:
$ iostat -d -x 2 5
每 2 秒输出一次,一共输出 5 次。
iotop
iotop 可以像 top 一样列出所有进程的 IO 数据。
通过键盘的左右键,可以选择排序优先级。
iotop 常用命令
查看当前磁盘的读写:
$ sudo iotop -botqqq -n 10
-
-b
batch mode 非交互模式 -
-o
只显示当前正在读写磁盘的进程 -
-t
每行前添加一个时间戳 -
-q
quiet mode 不输出 header lines, 可以使用-qq
和-qqq
选项精简 iotop 的输出 -
-n <N>
或--iter=<N>
运行 N 次后退出
通过 -k
指定 iotop 输出的读写磁盘单位为 K
并通过 grep 过滤出大于 10K/s 的进程:
$ sudo iotop -botqqqk -n 3 | grep -P "\d\d\.\d\d K/s"
将 iotop 加入 crontab
按常规方式添加 crontab 无效,如下:
$ sudo crontab -e
* * * * * root /sbin/iotop -botqqqk -n 3 | grep -P "\d\d\d\.\d\d K/s" >> /var/log/iotop.log
需要加入 crontab 文件才行。创建文件:
$ sudo vi /etc/cron.d/iotop
添加:
* * * * * root /sbin/iotop -botqqqk -n 3 | grep -P "\d\d\d\.\d\d K/s" >> /var/log/iotop.log
ionice 设定读写磁盘优先级
ionice 设置进程使用磁盘的优先级。
查看进程默认读写磁盘优先级:
$ ionice -p $(pgrep rsyslogd)
none: prio 0
设置进程读写磁盘优先级:
$ sudo ionice -c 3 -p $(pgrep rsyslogd)
$ ionice -p $(pgrep rsyslogd)
idle
-c
用于设置读写磁盘优先级的类别:
-
0 (none)
默认优先级 -
1 (Real time)
最高优先级 -
2 (Best Effort)
中等优先级 -
3 (Idle)
最低优先级
上例设置 rsyslogd 为最低优先级。
-p PIDs
可以一次设定多个进程的优先级。
systemctl 限制 IO 使用
通过 systemctl 查看 IO 权重:
$ systemctl show --property IOWeight rsyslog
IOWeight=[not set]
设置新的 IO 权重:
$ sudo systemctl set-property rsyslog IOWeight=1
$ systemctl show --property IOWeight rsyslog
IOWeight=1
Linux control group 中 io.weight
的值为 [0, 10000],值越大权重越高,默认为 100。以上设置 rsyslog.service 的权重为最低。