from:
測試人員向我們反映:在facebook平台的遊戲比其它平台的遊戲明顯更慢。我詢問,是不是因為翻牆網路原因。他們說:不是,其它遊戲也比較流暢。使用httpwatch檢視了http請求,發現api.php請求花了6秒,且大部分時間是紅色(httpwatch紅色表示伺服器運算時間)。平常2秒,現在6秒,伺服器處理時間在不同的伺服器相差這麼多。直覺告訴:伺服器資源。
1.別的先不管,先top看一下cpu、ram、swap哪個比較緊張。
由上圖分析,可以看出共有602個程序,其中有601個程序休眠了。這好像有點不對勁,核心程序也就80個左右,加上memcached, nginx, mysqld,也不會超出90個。除了這些,剩下的只有php-fpm管理的php-cgi,難道是…?
cpu顯示,cpu壓力並不大,可以說沒有壓力。我們再看記憶體使用概要,發現4g的記憶體,消耗得所剩餘無幾(free+buffers), 95%以上的記憶體都已分配。互動空間使用情況,我們暫時不去關心。指令top還列出了占用資源最多的程序,執行時間最久(time+)的mysqld(約2小時)占用資源並不是最多。另外,再看php-cgi,單個php-cgi占用的記憶體也不算多。所以,可以大膽地猜想:伺服器記憶體資源比較緊張,並沒有被某個程序占用大量記憶體,有可能被某些掛起的程序佔著記憶體沒有釋放。通過free進一步監控記憶體使用情況,驗證我們的想法。
2.指令free,了解ram資源使用情況。當然,你也可以檢視檔案/proc/meminfo
我們先來看mem統計資訊,total表示物理記憶體總量,約4g。used,表示已分配記憶體,分配了並不表示使用了,包括(buffer&cached)。free指未分配的記憶體,buffers與cached表示分配了但還沒有被使用的記憶體。第二行(buffers/cache)的,used表示真正被使用了記憶體,由第一行的(used-buffer-cached)得到,free則表示還沒有被使用的記憶體,由第一行的(free+buffer+cached)得到。swap行則表示記憶體交換使用情況,少量的(不頻繁地)swpd,是不會影響伺服器效能的,因為系統需要將v型別的記憶體頁面交換出去或者調整了buffer與cached的大小。但是頻繁地swpd,則有可能意味著伺服器物理記憶體不足,小於指定的swap額定值,需要換出記憶體頁。
檢視free結果的時候,我們主要檢視第二行。一眼就能看出4g的記憶體,其中有3898m記憶體被用了,還有49m記憶體沒有,都快用完了。這也證實了我們第一步的猜想,記憶體被用完。這裡,我們進一步猜想,記憶體空間嚴重不足的情況下,程序會被blocked,系統會不斷地將不用的資料換出so,將要用的資料讀入si。我們能通過vmstat進一步驗證,我們的這個猜想。
3.指令vmstat監控記憶體使用情況
作為對記憶體監控,我們比較關心swpd、free、si、so。一般系統不繁忙的狀態下,我們看到swpd,so的值不會持續很高,經常為0。這裡,我們看到swpd值為1.5g,以及free值很小,再一次表明物理記憶體不足。其中si報告了每秒從swap區移入到物理記憶體的記憶體總量,so報告了每秒從物理記憶體移出到swap區的記憶體總量。當然,si有時較大,並不要過份的焦慮,經常碰到乙個程式需要較大記憶體來讀寫**檔案時,si值就會變大。反倒是so,它通常是乙個記憶體緊缺的乙個訊號,如果長時間這個值一直保持較大的話,則很有可能記憶體不夠,小額波動,可以不用理會。接下來,可以通過ps找出消耗記憶體的元凶。
4.指令ps找出消耗記憶體的元凶
[root@localhost ~]# ps -a –sort -rss -o comm,pmem,pcpu |uniq -c |head -15
1 command %mem %cpu
1 mysqld 0.6 0.0
503 php-cgi 0.3 0.0
5 php-cgi 0.2 0.0
1 php-cgi 0.1 0.0
1 php-cgi 0.0 0.0
1 memcached 0.0 0.0
1 sshd 0.0 0.0
1 nginx 0.0 0.0
1 sshd 0.0 0.0
1 nginx 0.0 0.0
2 bash 0.0 0.0
3 nginx 0.0 0.0
1 sshd 0.0 0.0
1 nginx 0.0 0.0
指令ps比較常用,也比較簡單。上面報告結果,我們一眼就可以命中php-cgi這個程序。雖然單個php-cgi占用記憶體並不算太大,但是503個php-cgi程序,就有點恐怖了。幾乎佔盡了全部記憶體(503*0.3%)。我們可以猜想,php-cgi由php-fpm管理,是不是可以php-fpm的某個引數配置不當,導致開啟過多的php-cgi程序。
5. 設定php-fpm程序數量管理
通過重新將php-conf.conf的max_children值設定為150,系統記憶體又恢復到正常使用情況。free、si、so、b均表示記憶體系統資源正常,沒有壓力。
php-cgi程序釋放的記憶體並不會被系統立即**,乙個php-cgi大概占用20mb記憶體(取決於你載入的php extensions)。所以,有必要限制你啟動的php-cgi程序數量。那麼,這個數量多少合適呢,你可以在伺服器高峰期通過top統計出php-cgi數量。也可以像php-fpm建議的那樣,通過netstat -np | grep 127.0.0.1:9000來收集資料,通過設定max_children使等待的數量盡量小
6.乙個php-cgi占用多少記憶體
乙個php-cgi程序,大概占用多少記憶體呢,大概是20mb(具體的要看你的php載入了多少模組)。可以通過pmap指令檢視哪些地方占用了記憶體。所以,盡量不要載入不必要的php擴充套件模組,可以減少不必要的記憶體浪費。
[root@localhost etc]# pmap $(pgrep php-cgi |head -1)
6746: /usr/local/php/bin/php-cgi –fpm –fpm-config /usr/local/php/etc/php-fpm.conf
0000000000400000 6680k r-x– /usr/local/php/bin/php-cgi
0000000000c86000 268k rw— /usr/local/php/bin/php-cgi
0000000000cc9000 56k rw— [ anon ]
0000000005012000 2240k rw— [ anon ]
0000003efd200000 112k r-x– /lib64/ld-2.5.so
…….00002ac28a7a5000 2048k —– /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/xhprof.so
00002ac28a9a5000 4k rw— /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/xhprof.so
00002ac28a9a6000 84k r-x– /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/apc.so
00002ac28a9bb000 2048k —– /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/apc.so
00002ac28abbb000 8k rw— /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/apc.so
00002ac28abbd000 32k rw— [ anon ]
00002ac28abd4000 40k r-x– /lib64/libnss_files-2.5.so
00002ac28abde000 2044k —– /lib64/libnss_files-2.5.so
00002ac28addd000 4k r—- /lib64/libnss_files-2.5.so
00002ac28adde000 4k rw— /lib64/libnss_files-2.5.so
00007fffa717e000 84k rw— [ stack ]
ffffffffff600000 8192k —– [ anon ]
total 154172k
誰偷走了我的系統資源?
當系統變得緩慢時,我該如何診斷是誰在占用我的系統資源呢?別急,今天我們就來一起看看,如何利用 windows 7 內建的 資源監視器 這一強大工具,來診斷系統資源占用引發的一些問題。首先,我們來一起認識一下這個叫做 資源監視器 的工具吧。認識完了咱們會在文章最後結合具體案例給大家進行乙個實用指導的。...
系統資源的檢視
1年 ago mqzi 系統資源的檢視 free 檢視記憶體使用情況 muname 檢視與核心相關資訊 auptime 檢視系統啟動時間與工作負載 netstat 跟蹤網路 a將系統上所有連線,監聽,socket資料都列出來 t 列出tcp網路資料報 u 累出udp網路資料報 n 不列出程序的服務名...
AIX 使用者的系統資源使用限制
適用作業系統 aix v4 網路配置步驟 aix 使用者使用的系統資源限制包括兩個概念 硬限制 hard limits 和軟限制 soft limits hard limits 自aix 4.1版本開始引入。hard limits 應由aix系統管理員設定,只有security組的成員可以將此值增大...