2010-01-08 20 views
5

我的服務器有8G RAM和8Gig配置爲交換文件。我有內存密集型應用程序運行。這些應用程序具有峯值負載,在此期間我們發現交換使用率增加大約使用1 GIG交換。基於Linux將進程內存從RAM交換到交換文件的確切條件是什麼?

我的RAM 4Gigs和交換,並在其上運行類似的內存密集型應用的8場音樂會的另一臺服務器。但在這裏交換使用是非常可以忽略的。大約100 MB。

我想知道什麼是確切條件或粗略的公式在此基礎上的Linux會做一個進程內存的換出在RAM交換文件。 我知道它基於交換因子。還有什麼基礎?交換文件大小?任何指向Linux內核文檔/源代碼的指示都會很好。

回答

8

我已經看到很多人發佈的這是什麼一樣的主觀解釋。希望這是一個更完整的答案。

在2.6.28後的拆分LRU上Linux swappiness是一個乘法器,用於任意修改計算的分數,以確定兩個LRU中建立的壓力。

因此,例如在一個沒有剩餘空閒內存的系統上 - 您現有內存的價值是根據多少內存被列爲「活動」的速率以及頁面的頻率在進入不活動列表後升級爲活動狀態。

一個有很多促銷/活動和非活動頁面降級的LRU有很多用處。

通常文件支持的存儲更便宜和更安全,以便在內存用完時自動獲得200的修飾符(這使得文件支持的內存比交換支持的內存(其值爲0)多200倍,當它乘以這個分數

什麼swappiness做的是修改這個值,通過減去你給的swappiness數(默認爲60)到文件內存並且增加swappiness的值作爲一個倍數給anon memory,因此默認的swappiness離開匿名內存比文件內存高80倍(文件爲200-60,匿名內存爲0 + 60),因此,在一個典型的使用了所有內存的Linux系統上,頁面緩存將不得不超過80倍對匿名我來說比匿名記憶更有效mory將被換出以支持頁面緩存。

如果將swappiness設置爲100,則會給anon修飾符100和文件內存修飾符100(200 - 100),使兩個LRU的權重相等。因此,在一個文件繁重的系統上,想要提供頁面緩存的anon內存不如頁面緩存那麼活躍,那麼anon內存將被交換到磁盤以騰出額外頁面緩存的空間。

+0

非常豐富。謝謝。 – Zenil

+1

爲了記錄,交換的金額與您使用交換的頻率沒有關係。 –

5

Linux操作系統(或者任何其他操作系統)把存儲器成頁(通常4KB)。這些頁面中的每一個代表一塊內存。維護這些頁面的使用信息,基本上包含有關頁面是空閒還是正在使用(某些進程的一部分),最近是否被訪問過,它包含什麼類型的數據(過程數據,可執行代碼等等)的信息),頁面的所有者等。這些頁面也可以大致分爲兩類 - 文件系統頁面或頁面緩存(所有讀取/寫入文件系統的數據所在的頁面緩存)和屬於進程的頁面。

當系統內存不足,內核啓動換出基於其使用的網頁。使用訪問的新近程度排序的頁面列表對於確定哪些頁面可以被換出是常見的(Linux內核也有這樣的列表)。

交換過程中,Linux內核的需求來決定的摧毀內存頁面並將它們發送到交換時如何權衡。如果它太積極地交換文件系統頁面,則需要從文件系統讀取更多的讀取數據,以便在需要時讀取這些頁面。但是,如果它更積極地交換進程頁面,則可能會損害交互性,因爲當用戶嘗試使用交換出的進程時,必須從磁盤讀回進程頁面。在這看到一個很好的討論here

通過設置swappiness = 0,你說的是linux內核不換出屬於過程的頁面。當設置swappiness = 100時,您會告訴內核更積極地換出屬於進程的頁面。要調整系統,請嘗試使用「vmstat」命令以10爲單位更改swappiness參數,監視每次設置中交換的性能和頁面。保持最佳效果的設置。請記住在高峯使用時間內進行此測試。 :)

對於數據庫應用,swappiness =通常建議0。 (即使這樣,測試系統上的不同設置以獲得良好的價值)。

參考文獻:
http://www.linuxvox.com/2009/10/what-is-the-linux-kernel-parameter-vm-swappiness/
http://www.pythian.com/news/1913/

+1

術語可能已經改變,但在過去的日子裏,「換」 意味着交換整個過程,而「分頁」意味着交換單個存儲器頁面。大多數操作系統都會進行分頁,我唯一可以回憶的事情是「真正的」交換是UNICOS。 –

+1

我仍然遇到一些保持交換舊定義的老手,但現在非常罕見。全過程交換在當前系統中是一種不常見的技術,「交換」開始受到定義腐蝕併成爲無用術語,該術語被重新定義爲再次有用,使得它基本上與「分頁」相同。我偶爾會碰到一種名爲「全進程分頁」的老式交換方式,這種交換方式可能是重新定義輪迴的有趣轉折,但往往被理解。 – wrosecrans

+0

對於共享庫,寫入時複製分支等,完全意味着通過交換整個過程變得有點模糊。 –