記一次優(yōu)化Linux服務(wù)器swap內(nèi)存過(guò)高問(wèn)題
概述
今天收到zabbix告警,有點(diǎn)奇怪的是swap內(nèi)存使用很高,但實(shí)際使用內(nèi)存卻不多,下面一起來(lái)看看吧:
1. 查看服務(wù)器內(nèi)存使用情況
可以發(fā)現(xiàn)實(shí)際剩余內(nèi)存還剩很多,但swap已經(jīng)使用了90%
2. 查看占用swap過(guò)高的進(jìn)程
正常情況下swap的使用應(yīng)該是0,所以swap剩余小于80%時(shí),我們便需要關(guān)注是哪個(gè)進(jìn)程占用過(guò)高。
通過(guò)以下命令查看占用swap過(guò)高的進(jìn)程:
- for i in `cd /proc;ls |grep "^[0-9]"|awk ' $0 >100'` ;do awk '/Swap:/{aa=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps ;done |sort -k2nr

3. 查看進(jìn)程
檢查pg數(shù)據(jù)庫(kù)無(wú)異常,也沒(méi)有任務(wù)在跑。

4. 配置內(nèi)核參數(shù)來(lái)減少swap的使用
如果內(nèi)存夠大,其實(shí)不必太多的使用 SWAP 分區(qū), 可以通過(guò)修改 swappiness 的數(shù)值。swappiness=0的時(shí)候表示最大限度使用物理內(nèi)存,然后才是 swap空間,swappiness=100的時(shí)候表示積極的使用swap分區(qū),并且把內(nèi)存上的數(shù)據(jù)及時(shí)的搬運(yùn)到swap空間里面。
在linux里面,默認(rèn)設(shè)置swappiness這個(gè)值等于60。
現(xiàn)在一般1個(gè)G的內(nèi)存可修改為10, 2個(gè)G的可改為5, 甚至是0。具體這樣做:
- --盡可能使用內(nèi)存而不用swap
- echo "vm.swappiness=1">>/etc/sysctl.conf
- sysctl -p
- --刷新SWAP
- --刷新一次SWAP(將SWAP里的數(shù)據(jù)轉(zhuǎn)儲(chǔ)回內(nèi)存,并清空SWAP里的數(shù)據(jù))
- swapoff -a && swapon -a
- --清理緩存
- sync
- echo 3> /proc/sys/vm/drop_caches
5. 處理后結(jié)果
可以發(fā)現(xiàn)問(wèn)題已解決。
