有没有办法在linux(RHEL6.1)中记录磁盘写操作的原因(或目标文件)?

有没有办法在linux(RHEL6.1)中记录磁盘写操作的原因(或目标文件)?

我有一个虚拟机,上面有一个基于 php 的应用程序(在 apache 中),当查看磁盘活动时,发现 apache 运行时有恒定的 170kbps 写入速度。

当我们施加负载时,服务器的性能会受到 CPU 的限制,但这似乎与磁盘写入 IO 跳跃 20-30 倍直接相关。CPU 使用率图表反映了写入磁盘访问图表。

有任何想法吗?

答案1

两条建议:

iotop是一个方便的程序,它以类似命令的格式显示实时 I/O 使用情况top。这应该可以帮助您识别执行所有 I/O 的脚本/二进制文件。我认为这可能已安装在较新的内核上,但如果您没有看到它,yum 可能会在 RHEL 上提供它。

lsof对 I/O 故障排除也很有用;它列出了所有打开的文件。

更新

如果磁盘活动“持续不断”,那么iotop应该会告诉您哪些进程是罪魁祸首。关于 I/O 事务历史记录:我认为大多数 Linux 发行版中都没有记录 IO 历史记录,但您可以添加 cron 作业。

以 root 身份打开 crontabcrontab -e并添加以下两行:

* * * * * /bin/date >> /var/log/iotop; /usr/local/bin/iotop -bot --iter=3 -q >> /var/log/iotop
* * * * * /bin/date >> /var/log/lsof; /usr/bin/lsof -b -w >> /var/log/lsof

每分钟转储iotoplsof输出到日志。为每个文件添加一个 logrotate 脚本,以防止文件占用所有空间,例如:

someuser@myhost:~> cat /etc/logrotate.d/lsof
/var/log/lsof {
  rotate 3
  weekly
  compress
  missingok
  notifempty
}

答案2

似乎有一个不相关的后台任务正在删除 php 预编译到的 /tmp 目录的内容。结果,php 预编译过程再次启动,导致磁盘活动持续不断。

相关内容