交換為什麼以及如何提高性能,我可以禁用它嗎?
我有一台
8GB
執行 RAM的筆記型電腦4.0.4-2-ARCH
。最近,我安裝了Android Studio,然後 bam,我通常原始的系統突然結結巴巴並且完全凍結(不止一次)。在使用Android Studio之前,我可以輕鬆地同時執行SMB、Minidlna、Plex、MySQL、PostgreSQL、Apache 和 Chrome,沒有任何問題。現在,我什至很難用Android Studio執行**Chrome。在這兩種情況下,系統監視器都報告只使用了 RAM!
free``6.5G
所以我做了一點探勘並啟用了(swapfile)的交換。
5G
我對性能改進感到驚訝!沒有更多的滯後。但是,在峰值負載期間,(Studio 和 Chrome)使用的是5G
RAM +1.5G
交換。這讓我有點困惑,我有兩個問題。
首先,如果只使用過記憶體
6G
,為什麼會出現口吃,尤其是為什麼會凍結?其次,我的硬碟 (
1TB
) 大約 3 年了,我寧願保持交換禁用。有沒有其他方法可以在不強調硬碟驅動器的情況下實現*類似交換的性能。*我已經設置swappiness
了 10 的低值,它使用1G
正常,我的筆記型電腦已經達到了最大RAM
限制。我已經閱讀了這些出色的答案,但我之所以這麼問,是因為我對它們不滿意。
編輯:這些答案表明Linux將使用所有可用記憶體,因此,對於新程序,分頁會減慢電腦的速度。但是,如果Linux放入記憶體中的很多內容是無需管理即可管理的內容,為什麼在執行需要大 RAM 的程序時性能會受到影響?我的意思是,充其量程序啟動應該很慢(分頁)。
雖然看起來你有足夠多的 RAM,但 Linux 會在記憶體中緩衝文件數據。
/tmp
將文件系統放置在記憶體中以加快訪問速度也很常見。如果您沒有啟用交換,那麼有很多東西最終可能會卡在記憶體中,這可能會阻止記憶體經常訪問的文件。您的選擇實際上是:將未使用的記憶體分頁到磁碟;或重複從磁碟讀取文件。一旦記憶體(包括緩衝區)被填滿,您就沒有不需要 IO 的選項。如今,通常將記憶體分頁以交換最近未訪問過的記憶體,而不是換出整個程序。可能被分頁的內容包括:
- 已載入到程序中並針對其記憶體位置進行修改的非 PIC(位置無關程式碼);
- 讀入未被積極使用的程序的數據;
- 沒有被積極使用的臨時文件(可能被分頁);和
- 任何其他未被積極使用且沒有備用備份儲存的記憶體。
從磁碟讀取的 PIC 和其他未修改的數據可以使用從中讀取它的文件作為備份儲存,而不是使用交換。
您可以使用諸如
sar
監視分頁、交換和磁碟 I/O 之類的程序。我希望您在啟用交換後會看到更少的磁碟使用。如果要掛起到磁碟,通常需要相當大的交換空間,掛起時可以將記憶體複製到其中。