內存還剩余很多,卻使用 swap 分區
作者:張首富
時間:2020-06-18
w x:y18163201
原因
今天早上 AI 部門工程師來找我說,你會給 ubuntu 設置 swap 分區嗎,我們機器內存好像不咋夠用了,給我搞個 swap 分區吧!我說好的,這么簡單分分鍾鍾的事情,我三下五除二的就給他搞定了,給他說好了,你用吧,但是過一會他就跑來說,你給我弄好 swap 分區之后這台機器就特別特別卡,你能幫我看看什么問題嗎?
排查
我登錄到機器上,查看機器內存free -h
結果如下圖
從結果可以看出來,機器在內存還剩 148G 但是 swap 分區卻完全被使用完了,這說明我給他創建好 swap 分區之后完全他完全不使用內存了,這是什么情況,查閱資料得到如下解決辦法
解決問題
swappiness的值的大小對如何使用swap分區是有着很大的聯系的。
swappiness=0的時候表示最大限度使用物理內存,然后才是 swap空間,swappiness=100的時候表示積極的使用swap分區,並且把內存上的數據及時的搬運到swap空間里面。
當該參數= 0,表示只要有可能就盡力避免交換進程移出物理內存; 該 參數=100,這告訴內核瘋狂的將數據移出物理內存移到swap緩存中。
這個值只是一個Linux在判斷是否交換內存(swap)的一個“傾向”參考值,而並不是說,設置為0以后,Linux就完全不會使用內存交換空間
然后 ubuntu 和 centos 一般默認都是 60 ,就是當內存使用=(100%-60%)*內存總量
cat /proc/sys/vm/swappiness
60
所以才會出現我們上面那種情況,這個時候我們只需要調整這個值即可,
sysctl vm.swappiness=10 #臨時修改
echo "vm.swappiness=10" >> /etc/sysctl.conf #永久修改
sysctl -p #生效
改完之后就會使用物理內存了,剛才卡的情況也解決了