問題:Linux報swap空間占用過高,但物理內存還有空余
報錯
收到報警,swap空間占用過高,登錄到系統查看內存使用詳情,看到物理內存還有很多未使用
問題分析
Swap配置對性能的影響
分配太多的Swap空間會浪費磁盤空間,而Swap空間太少,則系統會發生錯誤。如果系統的物理內存用光了,系統就會跑得很慢,但仍能運行;如果Swap空間用光了,那麽系統就會發生錯誤。例如,Web服務器能根據不同的請求數量衍生出多個服務進程(或線程),如果Swap空間用完,則服務進程無法啟動,通常會出現“application is out of memory”的錯誤,嚴重時會造成服務進程的死鎖。因此Swap空間的分配是很重要的。
通常情況下,Swap空間應大於或等於物理內存的大小,最小不應小於64M,通常Swap空間的大小應是物理內存的2-2.5倍。但根據不同的應用,應有不同的配置:如果是小的桌面系統,則只需要較小的Swap空間,而大的服務器系統則視情況不同需要不同大小的Swap空間。特別是數據庫服務器和Web服務器,隨著訪問量的增加,對Swap空間的要求也會增加,一般來說對於4G 以下的物理內存,配置2倍的swap,4G 以上配置1倍。
另外,Swap分區的數量對性能也有很大的影響。因為Swap交換的操作是磁盤IO的操作,如果有多個Swap交換區,Swap空間的分配會以輪流的方式操作於所有的Swap,這樣會大大均衡IO的負載,加快Swap交換的速度。如果只有一個交換區,所有的交換操作會使交換區變得很忙,使系統大多數時間處於等待狀態,效率很低。用性能監視工具就會發現,此時的CPU並不很忙,而系統卻慢。這說明,瓶頸在IO上,依靠提高CPU的速度是解決不了問題的。
問題解決
swap配置優化:
控制swap使用的系統參數:swappiness,wappiness的值的大小對如何使用swap分區是有著很大的聯系的。
swappiness=0的時候表示最大限度使用物理內存,然後才是 swap空間,swappiness=100的時候表示積極的使用swap分區,並且把內存上的數據及時的搬運到swap空間裏面。linux的基本默認設置為60,具體如下:
一般默認值都是60
[root@swnode2 ~]# cat /proc/sys/vm/swappiness
60
也就是說,你的內存在使用到100-60=40%的時候,就開始出現有交換分區的使用。大家知道,內存的速度會比磁盤快很多,這樣子會加大系統io,同時造的成大量頁的換進換出,嚴重影響系統的性能,所以我們在操作系統層面,要盡可能使用內存,對該參數進行調整。
臨時調整的方法如下,我們調成10:
[root@swnode2 ~]# sysctl vm.swappiness=10
vm.swappiness = 10
[root@swnode2 ~]# cat /proc/sys/vm/swappiness
10
這只是臨時調整的方法,重啟後會回到默認設置的
要想永久調整的話,需要將
需要在/etc/sysctl.conf修改,加上:
[root@swnode2 ~]# cat /etc/sysctl.conf
# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296
vm.swappiness=10
激活設置:
#sysctl -p
知識點
簡單地說這個參數定義了系統對swap的使用傾向,默認值為60,值越大表示越傾向於使用swap。可以設為0,這樣做並不會禁止對swap的使用,只是最大限度地降低了使用swap的可能性。
通過sysctl -q vm.swappiness可以查看參數的當前設置。
修改參數的方法是修改/etc/sysctl.conf文件,加入vm.swappiness=xxx,並重起系統。這個操作相當於是修改虛擬系統中的/proc/sys/vm/swappiness文件,將值改為XXX數值。
參考鏈接:https://blog.csdn.net/lufeisan/article/details/53339991、https://blog.csdn.net/ly890700/article/details/73695750
原創:轉載請註明出處
問題:Linux報swap空間占用過高,但物理內存還有空余