Memory
如何追踪 I/O 峰值的來源?
我將 Linux 用作桌面,並且不斷獲得看似隨機的 I/O 峰值。機器變得異常緩慢。起初我以為只是我沒有足夠的記憶。但是看輸出
free
並top
沒有什麼異常。CPU負載也是如此。如果我不立即終止有問題的程序,機器會快速(大約 10 分鐘)磨到幾乎完全停止,我必須硬重置。
一位同事告訴我他有類似的問題,他注意到 I/O 峰值。順便說一句,我們有相同的機器(它們由公司提供)。
我還注意到在 Chrome 中打開新標籤時經常會出現這些峰值。但它認為它也發生在其他場合。就像在 Firefox 中打開一個標籤,或者只是隨機地打開一個標籤。
我決定執行
dstat
並查看輸出,但改變了主意並使用了ksysguard
,僅僅是因為更改更容易看到。監視器截圖:
如您所見,磁碟 I/O 出現峰值,與系統負載峰值同時出現。奇怪的是,此時記憶體使用量下降了。會不會和swap有關?
有兩個尖峰。第一個是我立即感受到的,恰逢在Chrome中點擊了一個連結(甚至沒有打開標籤,而是觸發了JavaScript程式碼)。我立即點擊該選項卡上的“關閉”按鈕,機器再次響應。第二個沒有明顯效果。記憶體使用量下降的事實可能是因為我關閉了選項卡,因為它發生在I/O 峰值之後。
整個尖峰(第一個)持續了大約 10 秒。
知道要注意什麼嗎?
我找到了罪魁禍首。
這確實是由於交換設置錯誤造成的。我
fstab
列為/dev/mapper/cryptswap
交換空間。這是不存在的。我的猜測是,只要係統需要交換,它就會看到已定義交換空間,但該設備在任何地方都不存在。為了測試,我只是創建了空文件作為交換空間。從那以後,機器執行起來似乎穩定了很多。從那以後,我就再也沒有出現過峰值/崩潰。但我確實看到正在使用新的交換文件。