您好,登錄后才能下訂單哦!
web服務器是用tengine+php5.5,用的是阿里云ECS
訪問量沒有多少,但是內存總是在90%以上。
查看占用內存前10個進程
ps -aux | sort -k4nr | head -n 10
發現大多數進程都是php-fpm
重啟php-fpm還是一樣的。
釋放內存
echo 1 > /proc/sys/vm/drop_caches
還是在89%左右
安裝nmon,分析內存占用工具
yum install -y nmon
執行一下
nmon
按一下m鍵(內存),就可以看到如下界面
MB MB MB
Cached= 481.3 Active= 1066.2
Buffers=54.6 Swapcached=0.0 Inactive =195.3
Dirty=0.6 Writeback =0.0 Mapped =39.2
Slab=224.5 Commit_AS =3071.4 PageTables=114.9
發現slab特別大,應該是這個原因(slabtop)
然后釋放緩存,等待15秒
echo 2 > /proc/sys/vm/drop_caches
再次查看,發現內存正常了,為10%。
[root@iZ23l etc]# free -m
total used free shared buffers cached
Mem: 15948 1502 14445 0 51 427
-/+ buffers/cache: 1022 14925
Swap: 0 0 0
本文參考
http://ju.outofmemory.cn/entry/170007
說明:
之前服務器,因為開啟以下2個參數
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
導致外網APP用戶,在wifi情況下,登陸超時。3G,4G網絡正常。
把這2個參數關閉之后,就正常了。
隨之而來的問題,就是TIME_WAIT急劇增加,一度增加到12萬。
所以net.ipv4.tcp_max_tw_buckets = 200000 參數增加到20萬,messages日志就沒有報錯了。
之后發現內存,一度在90%左右。因為保持TIME_WAIT需要占用一定的內存,以為是TIME_WAIT導致的內存升高,所以將net.ipv4.tcp_tw_reuse = 0設置為0,TIME_WAIT由17000降低至13000。但是內存只降低了1G左右,效果甚微。
每到周末放假,就內存告警。煩死了,本來想增加內存的,被老大駁回了(訪問量沒有多少,內存卻要增加,不能接受)。哎,就只能自己想辦法搞定了。
將net.ipv4.tcp_tw_recycle = 1設置為1(這個會導致nat網絡環境連接超時),幾分鐘之后,IME_WAIT降低至100左右,但是內存還是沒有降低多少。
所以說不是TIME_WAIT導致的。
后來參考上面的鏈接,發現,果然內存降低了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。