
我有一個虛擬機,上面有一個基於 php 的應用程式(在 apache 中),在查看磁碟活動時,當 apache 運行時,會出現恆定的 170kbps 寫入。
當我們應用負載時,伺服器的效能受 cpu 限制,但這似乎與 20-30 倍的磁碟寫入 IO 跳躍直接相關。 CPU 使用率圖反映了寫入磁碟存取圖。
有任何想法嗎?
答案1
兩個建議:
奧托普是一個方便的程序,它以類似於命令的格式向您顯示即時 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 預編譯過程再次啟動,導致磁碟活動持續。