Linux的內存分配采取的是一種更加積極的分配策略,它假設應用申請了內存空間后並不會立即去使用它,所以允許一定量的超售,當應用真的需要使用它的時候,操作系統可能已經通過回收了其他應用的內存空間而變得有能力去滿足這個應用的需求,簡單的說,就是允許應用申請比實際可分配空間(包括物理內存和Swap)更多的內存,這個特性稱為OverCommit。
這個特性在Linux操作系統里面也是可配的,可以通過設置/proc/sys/vm/overcommit_memory為不同的值來調整OverCommit策略。
overcommit_memory可以取3個值:
0:默認值,由Linux內核通過一些啟發式算法來決定是否超售和超售的大小,一般允許輕微的超售,拒絕一些明顯不可能提供的請求,同時做一些規則限制,比如不同用戶overcommit的大小也不一樣。
1:允許,不做限制的超售,當然這個也不是無限大,還受到尋址空間的限制,32位系統最大可能只有4G,64位系統大概16T左右。
2:禁止,禁止超售,系統能夠分配的內存不會超過swap+實際物理內存*overcommit_ratio,該值可以通過/proc/sys/vm/overcommit_ratio設置,默認50%。
如何修改該參數:
編輯 /etc/sysctl.conf 添加 vm.overcommit_memory=1
或者 sysctl vm.overcommit_memory=1
或者 echo 1 > /proc/sys/vm/overcommit_memory
以上動作完成后, 使用 sysctl -p 使新的參數生效。
