文章標簽 ‘php-fpm’

php-fpm進程管理方式

2011年11月1日 沒有評論

目前最新5.3.x的php-fpm,有兩種管理進程的方式,分別是static和dynamic。

如果設置成static,進程數自始至終都是pm.max_children指定的數量,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers配置將沒有作用。

如果設置成dynamic,則進程數是動態的,最開始是pm.start_servers指定的數量,如果請求較多,則會自動增加,但不超過pm.max_children指定的數量,同時保證空閑的進程數不小于pm.min_spare_servers,如果進程數較多,也會進行相應清理,保證多余的進程數不多于pm.max_spare_servers。

當php-fpm啟動后,一個php-cgi進程約戰3M內存,但是當它們處理過一些請求后,有些內存是釋放不掉的,占用的內存能達到20M-30M不等。

對于內存比較吃緊,同時并發量不是很大的應用,可以考慮采用static的方式,這樣可以很好的控制php-fpm的所消耗的總內存數,讓系統更加平穩運行。另外由于并發量很小,可以適當的把設置pm.max_requests小一些,以便讓php-fpm進程有機會重啟,從而釋放其占用的內存。

nginx+php-fmp 內存不釋放

2011年8月11日 沒有評論

由于服務器只有600M的內存,上面跑了一個并發并不是很大的php應用,當運行一段時間后,發現內存不斷增長,其中一部分是PageCache的增長, 這個可以通過echo 3 > /proc/sys/vm/drop_caches 命令來進行有效的釋放,另外一個應用內存的增長,且無法釋放,通過top命名(輸入命名后按m鍵可按進程占用內存大小的排序)查看,發現大部分內存都被 php-fpm 占用,網上查了一下,大概的意思是說,處理每個php請求完成后,php-fpm會回收內存,但不會釋放給操作系統,從而導致大量的內存被php-fpm 占用。網上也提到解決方法,就是調整php-fpm.conf中的pm.max_requests值,pm.max_requests的作用是發送多少個 請求后會重啟該線程,從而使其釋放占用的內存,默認0,即決不重啟。在我的應用把該值設置為250,觀察一段時間后,發現還是有好幾個php-fpm占用 內存的比例是2.8%左右,效果不理想,可能的原因是請求量大,還是無法達到這個閥值,將其設置為10的時候,發現php-fpm是會不斷的重啟的。個人 感覺這樣配置不是太好,所有還是把這個值置為250,同時用一個腳本來進行殺掉php-fpm,從而釋放他占用的內存,另外如果系統負載巨大,重啟會導致 cpu的使用率飆升。腳本如下:
#!/bin/bash
log=/home/www/scripts/php-fpm.log
echo `date “+%F %H:%M:%S”` >> $log
for PID in `ps aux|grep php-fpm|grep -v grep|awk ‘{if($4>=1)print $2}’`
do
kill -9 $PID
echo $PID >> $log
done

可以把腳本加到crontab中讓其定期執行.

另外記錄幾個長用的命令:
1、按順序列出內存占用率的進程?? ? ps -A –sort -rss -o comm,pmem,pcpu |uniq -c |head -15
2、指令vmstat可以監控內存使用情況,作為對內存監控,我們比較關心swpd、free、si、so。一般系統不繁忙的狀態下,我們看到swpd,so的值不會持續很高,經常為0
3、通過pmap來查看進程占用內存的詳細情況,例如,pmap 進程號

本 文參考了:http://blog.csdn.net/zouyongjin/article/details/6642157和http: //www.opsers.org/linux-home/server/php-fpm-on-analysis-of-system-resources.html

分類: Linux 標簽: , ,

無覓相關文章插件,快速提升流量

30选5怎么中奖