Linux 在 I/O 負載期間凍結
我使用帶有 Dell XPS 15 的 Linux Mint 作為工作筆記型電腦,並使用 gradle 建構了一個大型 Android 應用程序。
通過所有優化,它仍然使用幾乎所有可用的 RAM(16 GB)並開始使用交換文件中的 SWAP(也許,我應該改用交換分區?)。它會導致高 I/O 速率並且 Cinnamon(和所有其他應用程序)凍結。
此外,我嘗試測試 I/O 是導致這些問題的原因,並發現執行
dd
命令為我的 I/O 系統創建負載也會導致相同的問題。(例如,我無法在 Mac OS 上重現此行為)我發現我應該將 I/O 調度程序類型更改為
deadline
,但我的/sys/block/nvme0n1/queue/scheduler
文件只包含none
選項。正如我理解的那樣,這意味著使用了https://www.thomas-krenn.com/en/wiki/Linux_Multi-Queue_Block_IO_Queueing_Mechanism_(blk-mq)框架,我不應該改變任何東西。**問題:**如何在 I/O 負載期間解決這些凍結問題?也許,我應該分析哪些指標以獲得更多資訊?
環境:
OS: Linux Mint 18.3 Cinnamon 64-bit Cinnamon: 3.6.7 Linux Kernel: 4.13.0-38-generic
通過所有優化,它仍然使用幾乎所有可用的 RAM (16 GB)
它——誰?通常,自 1970 年代以來設計的每個通用作業系統都使用所有可用的 RAM 或其大部分來密集地進行慢速儲存內容記憶體。如果這意味著VM記憶體有什麼麻煩?執行
free -m
並研究它的輸出,它曾經有“+/- 記憶體/緩衝區”的特殊指示,暗示它不是不可撤銷的使用 -如果存在記憶體壓力,記憶體會縮小。這是一個新手會很典型的誤解……
我發現我應該將 I/O 調度程序類型更改為截止日期
調度程序用於 HDD 等慢速設備。使用 SSD/NVME,它只是額外的成本——您不需要排隊等待請求,因為重新排序它們沒有任何好處——與 HDD 相比,它在減少尋軌時間方面發揮著重要作用。
在 I/O 負載期間如何解決這些凍結問題?
這裡沒有讀心器(作為一個例外,我更喜歡隱藏我的才能,以便其他人免於嫉妒),
dd
可以以不同的方式執行,你為什麼不添加一個片段來顯示它是如何執行的?PS 通常我可以建議更新核心,因為它可能是特定的驅動程序怪癖得到(或沒有)解決。