我正在排除昨晚 Linux 服务器性能下降的故障。我在服务器上安装了 sysstat,它每 2 分钟轮询一次。在事件发生时,有大量磁盘活动(使用 sar -b 和 sar -d):
05:46:01 PM tps rtps wtps bread/s bwrtn/s
05:46:01 PM 246.26 1.85 244.41 141.65 10524.53
05:58:01 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
05:46:01 PM dev8-0 246.26 141.65 10524.53 43.31 0.09 0.38 0.16 3.92
如您所见,其中大部分是写访问。我想知道的是此时正在写入哪些文件。sar 似乎没有保留这些数据,所以我想知道是否有其他实用程序可以监视此类活动。我怀疑是否有任何方法可以获得任何历史记录,但如果我现在可以安装某些东西,它可能会对下一次事件有所帮助。
答案1
iotop
- 它将帮助您识别进程,然后您可以使用lsof -c <process>
它列出进程打开的所有打开的文件描述符。或者,您可以使用strace
进程来查看所有当前低级系统调用。
这些实用程序不是用于监控,而是用于实时调查。如果您还需要查看一些历史值,则需要实施适当的监控。
个人建议:
Sysdig(云)-https://github.com/draios/sysdig/wiki/Sysdig-Examples#disk:
查看磁盘带宽使用率最高的进程
sysdig -c topprocs_file
列出使用大量文件的进程
sysdig -c fdcount_by proc.name "fd.type=file"
查看读取+写入字节数最多的文件
sysdig -c topfiles_bytes
打印 apache 读取或写入的顶级文件
sysdig -c topfiles_bytes proc.name=httpd