永久關閉linux swap


一般來說,Linux的虛擬內存會根據系統負載自動調整。內存頁(page)swap到磁盤會顯著的影響Kafka的性能,並且Kafka重度使用page cache,如果VM系統swap到磁盤,那說明沒有足夠的內存來分配page cache。

 

避免swap的一種方式是設置swap空間為0。但是,swap會在系統崩潰時提供安全機制,或者會在out of memory的情況下阻止操作系統 kill 掉進程。由於這個原因,推薦 vm.swappiness參數設置為一個非常低的值:1 。這個參數表示 VM系統中的多少百分比用來作為swap空間。

 

另外一種方式是通過內核調節“臟頁”(注:“臟頁”會被刷到磁盤上)。Kafka依賴磁盤I/O性能來提高producer的響應時間。這也是為什么通常優先把log segment功能放在可以快速響應的磁盤中(比如SSD)。這樣使得flush進程把“臟數據”寫入磁盤前,“臟頁”數目就減少了,可以設置vm.dirty_background_ratio(表示占用系統內存的百分比)參數的值為10 以下。大部分應用場景下,vm.dirty_background_ratio設置為 5 就夠用了,要注意了:這個參數值不能設置為 0 ,因為設置為 0 后會引起內核持續刷“臟頁”,使得內核的buffer write功能沒法施展。

 

“臟頁”的總量可以通過vm.dirty_ratio 來改變,默認值是 20 (此處也是百分比),這個值的設置范圍較大,一般建議設置 60 到 80 為合理的值。但是vm.dirty_ratio 參數也引來了不小的風險,會造成大量unflush的數據在硬刷到磁盤時產生較長的I/O停頓。如果vm.dirty_ratio 值設置的較大時,強烈建議Kafka開啟備份功能,以備系統崩潰。

 

在設置了這些參數后,需要監控Kafka集群運行時“臟頁”的數量,當前“臟頁”數量可由如下方式查看(/proc/vmstat文件):

 #cat /proc/vmstat | egrep "dirty|writeback"

nr_dirty 3875

nr_writeback 29

nr_writeback_temp 0

 臨時生效:

sysctl -w vm.swappiness=0

永久生效:

echo "vm.swappiness = 0">> /etc/sysctl.conf     (盡量不使用交換分區,注意不是禁用)

刷新SWAP

可以執行命令刷新一次SWAP(將SWAP里的數據轉儲回內存,並清空SWAP里的數據)

swapoff -a && swapon -a
sysctl -p  (執行這個使其生效,不用重啟)




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM