天天看點

linux核心記憶體調整,調整linux核心盡量用記憶體,而不用swap

線上一台伺服器kswapd0占用大量的cpu資源,導緻負載過高,什麼是kswapd0?

linux核心記憶體調整,調整linux核心盡量用記憶體,而不用swap

Linux uses kswapd for virtual memory management such that pages that havebeen recently accessed are kept in memory and less active pages are paged outto disk.

(what is a page?)…Linux uses manages memory in units called pages.

So,the kswapd process regularly decreases the ages of unreferencedpages…and at the end they are paged out(moved out) to disk

kswapd0程序的作用:它是虛拟記憶體管理中,負責換頁的,作業系統每過一定時間就會喚醒kswapd ,看看記憶體是否緊張,如果不緊張,則睡眠,在 kswapd 中,有2 個閥值,pages_hige 和 pages_low,當空閑記憶體頁的數量低于 pages_low 的時候,kswapd程序就會掃描記憶體并且每次釋放出32 個free pages,直到 free page 的數量到達pages_high。

分析結果是:

physical mem 不足,引起 swap 頻繁讀寫。

kswapd0 是系統的虛拟記憶體管理程式,如果實體記憶體不夠用,系統就會喚醒 kswapd0 程序,由 kswapd0 配置設定磁盤交換空間作緩存,因而占用大量的 CPU 資源。

檢視記憶體及swap使用率:發現還有空餘的記憶體,但是已經開始用swap了。

linux核心記憶體調整,調整linux核心盡量用記憶體,而不用swap

記憶體使用到多少開始使用swap?

vm.swappiness 這個核心參數控制

/proc/sys/vm/swappiness

這個交換參數控制核心從實體記憶體移出程序,移到交換空間。該參數從0到100,當該參數=0,表示隻要有可能就盡力避免交換程序移出實體記憶體;該參數=100,這告訴核心瘋狂的将資料移出實體記憶體移到swap緩存中。

The defaultvalue I’ve seen on both enterprise level Red Hat and SLES servers is 60.

To find out what the default value is on aparticular server, run:

sysctl vm.swappiness

The value is also located in/proc/sys/vm/swappiness.

PS:設定vm.swappiness=0 後并不代表禁用swap分區,隻是告訴核心,能少用到swap分區就盡量少用到,設定vm.swappiness=100的話,則表示盡量使用swap分區,預設的值是60

調整記憶體參數,當記憶體使用率不足10%(開始是預設值60)時在使用swap,盡量避免使用swap,減少喚醒軟中斷程序,進而降低ksoftirqd程序對cpu的占用。

linux核心記憶體調整,調整linux核心盡量用記憶體,而不用swap