線上一台伺服器kswapd0占用大量的cpu資源,導緻負載過高,什麼是kswapd0?
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了。
記憶體使用到多少開始使用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的占用。