我有一个虚拟机,上面有一个基于 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
每分钟转储iotop
并lsof
输出到日志。为每个文件添加一个 logrotate 脚本,以防止文件占用所有空间,例如:
someuser@myhost:~> cat /etc/logrotate.d/lsof
/var/log/lsof {
rotate 3
weekly
compress
missingok
notifempty
}
答案2
似乎有一个不相关的后台任务正在删除 php 预编译到的 /tmp 目录的内容。结果,php 预编译过程再次启动,导致磁盘活动持续不断。