在 Ubuntu VM 上,iotop 向我显示一些“apache2 -k start”进程正在生成总磁盘读即使没有记录任何请求,负载也始终在 4 M/s 和 7 M/s 之间。
lsof 向我展示了 www-data 使用的大约 5000 个常规文件。我怎样才能确定是什么原因导致了如此多的磁盘 IO,而根本不应该有任何磁盘 IO?
答案1
高 I/O 的迹象可能需要跟踪工具来深入了解该 I/O 的详细信息;strace
是执行此操作的常见方法:
strace -e trace=file -ff -o output -y -p $some_httpd_pid_here
-e trace=file
跟踪文件相关操作(还有其他方便的说明符,请参阅详细手册),但不会显示read
可能需要确定正在读取哪些文件描述符的调用;为此-e trace=open,read
,或者只是跟踪所有内容,然后 grep 输出......-ff
跟随分叉,如果正在生成 CGI 等,或者如果您在httpd
主进程启动时跟踪主进程,那么这很好。-o output
与文件交互-ff
并生成供稍后查看的文件output
。output.*
-y
不能移植到旧版本,strace
但确实省去了找出文件描述符号 42 或任何引用者的麻烦。
(strace
也可能非常慢;另请参阅 Linuxsysdig
或SystemTap
有关跟踪事物或以其他方式调试内核正在执行的操作的替代方法...)