有沒有辦法在linux(RHEL6.1)中記錄磁碟寫入操作的原因(或目標檔案)?

有沒有辦法在linux(RHEL6.1)中記錄磁碟寫入操作的原因(或目標檔案)?

我有一個虛擬機,上面有一個基於 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

每分鐘轉儲iotoplsof輸出到日誌。為每個檔案新增一個 logrotate 腳本,以防止檔案佔用所有空間,例如:

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

答案2

似乎一個不相關的後台任務正在刪除預編譯 php 的 /tmp 目錄的內容。結果,php 預編譯過程再次啟動,導致磁碟活動持續。

相關內容