phpfpm進程數
㈠ 如何查看php-fpm進程數不夠用
使用 netstat -napo |grep "php-fpm" | wc -l 查看一下當前fastcgi進程個數,如果個數接近conf里配置的上限,就需要調高進程數。
㈡ 如何修改 php-fpm的運行用戶
第一種:一個php-fpm主進程
這種方式比較簡單,也只需要一個php-fpm自啟動文件。
首先我們查看一下原php-fpm.conf的這個配置文件,分為兩個部分,一個是global塊,另外一個是自定義的塊,配置文件裡面稱為pool池,默認叫「www」。在global池的上方,有一行注釋了的「include=etc/fpm.d/*.conf」配置項,再通過www池的配置,我們可知可以通過不同的池來配置不同的用戶,來達到多個用戶運行php-fpm的目的,步驟如下:
4、刪除前面的global塊,或者注釋掉。
5、修改[www]為其他,比如你[blog]。
6、配置[blog]池,主要修改兩個地方:
6.1:第一處為運行的用戶和用戶組。
即將
12user = www3group = www4。
修改為
12user=nobody #具體用哪個用戶視自己情況而定,我只做個示例3group=nobody4。
6.2:修改監聽的埠或者socket:
即將:
12listen = 127.0.0.1:90003。
修改為:
12listen = /var/socket/php-fpm/blog.socket #php-fpm需要自己創建,當然也可以直接放在php-fpm目錄下3。
修改成其他埠也是可以的,比如:listen = 127.0.0.1:9001。
7、到主配置文件 php-fpm.conf將「include=…」前面的注釋去掉,讓它去讀取fpm.d目錄下的配置文件。
8、到此第一種方案就修改完畢了,重新啟動測試一下:
12service php-fpm reload3。
第二種:兩個php-fpm主進程。
這種方法需要獨立的配置文件和獨立的自啟動文件:
1、復制一份php-fpm.conf主配置文件。
12cp php-fpm.conf php-fpm-blog.conf3。
2、修改主配置文件。
12vim php-fpm-blog.conf3。
2.1:修改[global]下pid和error_log文件的路徑。
修改 pid=run/php-fpm.pid 為 pid=run/php-fpm-blog.pid 。
修改 error_log = /log/php-fpm.log 為 error_log = /log/php-fpm-blog.log。
2.2:修改池的名稱[www]為[blog],不過這個可以不用修改了,因為這里和原來的進程是獨立的。
2.3:修改用戶和用戶組。
2.4:監聽埠或socket文件。
以上兩部可以按照第一種方案進行修改,這里就不再重復。
3、進入/etc/init.d目錄,復制一份自啟動文件。
12cp php-fpm php-fpm23。
4、修改自啟動文件php-fpm2:
4.1:修改配置文件路徑。
12php_fpm-CONF=${prefix}/etc/php-fpm.conf3。
為
12php_fpm-CONF=${prefix}/etc/php-fpm-blog.conf3。
這個路徑就是剛才的主配置文件。
4.2:修改PID文件路徑:
12php_fpm_PID=${prefix}/var/run/php-fpm.pid3。
為:
12php_fpm_PID=${prefix}/var/run/php-fpm-blog.pid3。
這個路徑要和主配置文件中的pid路徑一致。
5、修改完畢後添加自動啟動。
12chkconfig --add php-fpm23chkconfig --level 2345 php-fpm2 on4。
6、啟動服務。
㈢ 啟動php-fpm為什麼有啟動了多個進程
php-fpm的兩種進程管理模式 php-fpm的進程數也是可以根據設置分為動態和靜態的。 一種是直接開啟指定數量的php-fpm進程,不再增加或者減少; 另一種則是開始的時候開啟一定數量的php-fpm進程,當請求量變大的時候,動態的增加php-fpm進程數到上限,當空閑的時候自動釋放空閑的進程數到一個下限。 這兩種不同的執行方式,可以根據伺服器的實際需求來進行調整。 這里先說一下涉及到這個的幾個參數吧,他們分別是pm、pm.max_children、pm.start_servers、pm.min_spare_servers和pm.max_spare_servers。 pm表示使用那種方式,有兩個值可以選擇,就是static(靜態)或者dynamic(動態)。 在更老一些的版本中,dynamic被稱作apache-like。這個要注意看配置文件給出的說明了。PHP5.3 php-fpm的默認靜態處理方式會使得php-cgi的進程長期佔用內存而無法釋放,這也是導致nginx出錯的原因之 一,因此可以將php-fpm的處理方式改成apache模式。 下面4個參數的意思分別為: pm.max_children:靜態方式下開啟的php-fpm進程數量。 pm.start_servers:動態方式下的起始php-fpm進程數量。 pm.min_spare_servers:動態方式下的最小php-fpm進程數量。 pm.max_spare_servers:動態方式下的最大php-fpm進程數量。 如果dm設置為static,那麼其實只有pm.max_children這個參數生效。系統會開啟設置的數量個php-fpm進程。 如果dm設置為dynamic,那麼pm.max_children參數失效,後面3個參數生效。系統會在php-fpm運行開始的時候啟動 pm.start_servers個php-fpm進程,然後根據系統的需求動態在pm.min_spare_servers和 pm.max_spare_servers之間調整php-fpm進程數。 那麼,對於我們的伺服器,選擇哪種執行方式比較好呢?事實上,跟Apache一樣,我們運行的PHP程序在執行完成後,或多或少會有內存泄露的問題。 這也是為什麼開始的時候一個php-fpm進程只佔用3M左右內存,運行一段時間後就會上升到20-30M的原因了。所以,動態方式因為會結束掉多餘的進程,可以回收釋放一些內存,所以推薦在內存較少的伺服器或者VPS上使用。具體最大數量根據 內存/20M 得到。比如說512M的VPS,建議pm.max_spare_servers設置為20。至於pm.min_spare_servers,則建議根據伺服器的負載情況來設置,比較合適的值在5~10之間。 然後對於比較大內存的伺服器來說,設置為靜態的話會提高效率。因為頻繁開關php-fpm進程也會有時滯,所以內存夠大的情況下開靜態效果會更好。數量也可以根據內存/30M 得到。比如說2GB內存的伺服器,可以設置為50;4GB內存可以設置為100等。
㈣ 調整php-fpm進程數之後,為什麼負載飆升的厲害
2015-01-13 是1個php-fpm主進程,6個子進程。內存使用0.6455G 2015-01-20 是1個php-fpm主進程,30個子進程。內存使用0.4785G
雖然內存利用率和CPU的利用率都上去了,但是負載有點過高了。負載之前從來不過0.1,修改後,負載高的時候直接飆到0.56。
你可以去後盾人平台看看,裡面的東西不錯
㈤ php-fpm子進程會自動重啟嗎
伺服器出現異常,網站不能正常訪問。經排查�php的問題。
在重啟php-fpm時,恢復正常。1分鍾之後又出現故障。查看php日誌文件/usr/local/php/var/log 後提示
WARNING: [pool www] server reached pm.max_children setting (5), consider raising it
子進程數已經達到設置的最大值。
要設置php進程數量。需要在php-fpm.conf文件中修改。
先看/usr/local/php/etc/php-fpm.conf文件各項配置解析
pid = run/php-fpm.pid
#pid設置,默認在安裝目錄中的var/run/php-fpm.pid,建議開啟
error_log = log/php-fpm.log
#錯誤日誌,默認在安裝目錄中的var/log/php-fpm.log
log_level = notice
#錯誤級別. 可用級別為: alert(必須立即處理), error(錯誤情況), warning(警告情況), notice(一般重要信息), debug(調試信息). 默認: notice.
emergency_restart_threshold = 60
emergency_restart_interval = 60s
#表示在emergency_restart_interval所設值內出現SIGSEGV或者SIGBUS錯誤的php-cgi進程數如果超過 emergency_restart_threshold個,php-fpm就會優雅重啟。這兩個選項一般保持默認值。
process_control_timeout = 0
#設置子進程接受主進程復用信號的超時時間. 可用單位: s(秒), m(分), h(小時), 或者 d(天) 默認單位: s(秒). 默認值: 0.
daemonize = yes
#後台執行fpm,默認值為yes,如果為了調試可以改為no。在FPM中,可以使用不同的設置來運行多個進程池。 這些設置可以針對每個進程池單獨設置。
listen = 127.0.0.1:9000
#fpm監聽埠,即nginx中php處理的地址,一般默認值即可。可用格式為: 『ip:port』, 『port』, 『/path/to/unix/socket』. 每個進程池都需要設置.
listen.backlog = -1
#backlog數,-1表示無限制,由操作系統決定,此行注釋掉就行。backlog含義參考:
http://www.3gyou.cc/?p=41
listen.allowed_clients = 127.0.0.1
#允許訪問FastCGI進程的IP,設置any為不限制IP,如果要設置其他主機的nginx也能訪問這台FPM進程,listen處要設置成本地可被訪問的IP。默認值是any。每個地址是用逗號分隔. 如果沒有設置或者為空,則允許任何伺服器請求連接
listen.owner = www
listen.group = www
listen.mode = 0666
#unix socket設置選項,如果使用tcp方式訪問,這里注釋即可。
user = www
group = www
#啟動進程的帳戶和組
pm = dynamic #對於專用伺服器,pm可以設置為static。
#如何控制子進程,選項有static和dynamic。如果選擇static,則由pm.max_children指定固定的子進程數。如果選擇dynamic,則由下開參數決定:
pm.max_children #,子進程最大數
pm.start_servers #,啟動時的進程數
pm.min_spare_servers #,保證空閑進程數最小值,如果空閑進程小於此值,則創建新的子進程
pm.max_spare_servers #,保證空閑進程數最大值,如果空閑進程大於此值,此進行清理
pm.max_requests = 1000
#設置每個子進程重生之前服務的請求數. 對於可能存在內存泄漏的第三方模塊來說是非常有用的. 如果設置為 』0′ 則一直接受請求. 等同於 PHP_FCGI_MAX_REQUESTS 環境變數. 默認值: 0.
pm.status_path = /status
#FPM狀態頁面的網址. 如果沒有設置, 則無法訪問狀態頁面. 默認值: none. munin監控會使用到
ping.path = /ping
#FPM監控頁面的ping網址. 如果沒有設置, 則無法訪問ping頁面. 該頁面用於外部檢測FPM是否存活並且可以響應請求. 請注意必須以斜線開頭 (/)。
ping.response = pong
#用於定義ping請求的返回相應. 返回為 HTTP 200 的 text/plain 格式文本. 默認值: pong.
request_terminate_timeout = 0
#設置單個請求的超時中止時間. 該選項可能會對php.ini設置中的』max_execution_time』因為某些特殊原因沒有中止運行的腳本有用. 設置為 』0′ 表示 『Off』.當經常出現502錯誤時可以嘗試更改此選項。
request_slowlog_timeout = 10s
#當一個請求該設置的超時時間後,就會將對應的PHP調用堆棧信息完整寫入到慢日誌中. 設置為 』0′ 表示 『Off』
slowlog = log/$pool.log.slow
#慢請求的記錄日誌,配合request_slowlog_timeout使用
rlimit_files = 1024
#設置文件打開描述符的rlimit限制. 默認值: 系統定義值默認可打開句柄是1024,可使用 ulimit -n查看,ulimit -n 2048修改。
rlimit_core = 0
#設置核心rlimit最大限制值. 可用值: 『unlimited』 、0或者正整數. 默認值: 系統定義值.
chroot =
#啟動時的Chroot目錄. 所定義的目錄需要是絕對路徑. 如果沒有設置, 則chroot不被使用.
chdir =
#設置啟動目錄,啟動時會自動Chdir到該目錄. 所定義的目錄需要是絕對路徑. 默認值: 當前目錄,或者/目錄(chroot時)
catch_workers_output = yes
#重定向運行過程中的stdout和stderr到主要的錯誤日誌文件中. 如果沒有設置, stdout 和 stderr 將會根據FastCGI的規則被重定向到 /dev/null . 默認值: 空.
根據以上配置的解析,在php-fpm.conf文件中添加如下配置:
pm.max_children = 100
pm.start_servers = 30
pm.min_spare_servers = 20
pm.max_spare_servers = 100
以觀後效。
另附豆瓣技術貼:https://www.douban.com/note/315222037/
1、php-fpm優化參數介紹
他們分別是:pm、pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers。
pm:表示使用那種方式,有兩個值可以選擇,就是static(靜態)或者dynamic(動態)。
在更老一些的版本中,dynamic被稱作apache-like。這個要注意看配置文件的說明。
下面4個參數的意思分別為:
pm.max_children:靜態方式下開啟的php-fpm進程數量
pm.start_servers:動態方式下的起始php-fpm進程數量
pm.min_spare_servers:動態方式下的最小php-fpm進程數
pm.max_spare_servers:動態方式下的最大php-fpm進程數量
區別:
如果dm設置為 static,那麼其實只有pm.max_children這個參數生效。系統會開啟設置數量的php-fpm進程。
如果dm設置為 dynamic,那麼pm.max_children參數失效,後面3個參數生效。
系統會在php-fpm運行開始 的時候啟動pm.start_servers個php-fpm進程,
然後根據系統的需求動態在pm.min_spare_servers和pm.max_spare_servers之間調整php-fpm進程數
2、伺服器具體配置
對於我們的伺服器,選擇哪種執行方式比較好呢?事實上,跟Apache一樣,運行的PHP程序在執行完成後,或多或少會有內存泄露的問題。
這也是為什麼開始的時候一個php-fpm進程只佔用3M左右內存,運行一段時間後就會上升到20-30M的原因了。
對於內存大的伺服器(比如8G以上)來說,指定靜態的max_children實際上更為妥當,因為這樣不需要進行額外的進程數目控制,會提高效率。
因為頻繁開關php-fpm進程也會有時滯,所以內存夠大的情況下開靜態效果會更好。數量也可以根據 內存/30M 得到,比如8GB內存可以設置為100,
那麼php-fpm耗費的內存就能控制在 2G-3G的樣子。如果內存稍微小點,比如1G,那麼指定靜態的進程數量更加有利於伺服器的穩定。
這樣可以保證php-fpm只獲取夠用的內存,將不多的內存分配給其他應用去使用,會使系統的運行更加暢通。
對於小內存的伺服器來說,比如256M內存的VPS,即使按照一個20M的內存量來算,10個php-cgi進程就將耗掉200M內存,那系統的崩潰就應該很正常了。
因此應該盡量地控制php-fpm進程的數量,大體明確其他應用佔用的內存後,給它指定一個靜態的小數量,會讓系統更加平穩一些。或者使用動態方式,
因為動態方式會結束掉多餘的進程,可以回收釋放一些內存,所以推薦在內存較少的伺服器或VPS上使用。具體最大數量根據 內存/20M 得到。
比如說512M的VPS,建議pm.max_spare_servers設置為20。至於pm.min_spare_servers,則建議根據伺服器的負載情況來設置,比如伺服器上只是部署php環境的話,比較合適的值在5~10之間。
本伺服器配置
1、伺服器基本信息:
硬碟:數據盤30G、系統盤20G
內存:1.5G
CPU:雙核
系統:CentOS 6.3 64位
帶寬:獨享2M
2、部署的應用
Git、SVN、Apache、Tomcat、PHP、Nginx、mysql、JDK
3、優化後的參數
pm = dynamic
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
㈥ 簡述php的靜動態模式
php-fpm的進程數可以根據設置分為動態和靜態
A: 靜態static:直接開啟指定數量的php-fpm進程,不再增加或者減少;
B :動態dynamic:開始的時候開啟一定數量php-fpm進程,當請求變大的時候,動態的增加php-fpm進程數到上限,當空閑的時候自動釋放空閑進程數到一個下限。
這兩種不同的執行方式,可以根據伺服器實際需求來進行調整。
pm表示用哪種方式,有兩個值可以選擇,就是static靜態或者dynamic動態。
C: 4個相關參數參:
pm.max_children靜態方式下開啟的php-fpm進程數量;
pm.start_servers動態方式下的起始php-fpm進程數量;
pm.min_spare_servers動態方式下的最小php-fpm進程數量;
pm.max_spare_servers動態方式下的最大php-fpm進程數量。
你學會了不?沒有學會也沒關系,可以去找視頻看,跟著老師看視頻學習,我看的是黑馬程序員的學習視頻,你也可以看看。
㈦ linux php-fpm進程佔用了多少內存
這個佔用多少是根據你php-fpm.conf裡面的配置來的。 pm.min_spare_servers = 8pm.max_spare_servers = 16一般情況是。剛啟動的php-fpm佔用內存是10M,當過一段時間後會慢慢變成20M左右。 以我這里配置為例,最大情況是16個php-fpm子進程
㈧ LAMP下,動態請求並發為1000每秒,php-fpm最大進程數如何設置
最大進程數取決於你的內存數量和CPU性能。設置得太大容易卡死伺服器。至少最小數量,理論上只要大於1000即可
㈨ php fpm 進程數和並發數是什麼關系
strrev函數唄,不準用PHP內置的就自己寫:
strrev($str)
{ $len=strlen($str); $newstr = '';
for($i=$len;$i>=0;$i--) { $newstr .= $str{$i};
} return $newstr;
}這個解答不怎麼詳細,建議樓主自己去後盾人看看
㈩ 如何看php-fpm 進程數量是否足夠
首先,需要預估項目在生產環境能有多少並發產生,根據預估設置初始fpm進程數配置,具體可以參考PHP文檔
http://php.net/manual/zh/install.fpm.configuration.php
對於FPM的監控
建議開啟php-fpm.conf中pm.status_path設置,可以通過url請求獲取當前時刻fpm的進程狀態,支持html,josn,xml等數據格式返回,結合定時任務,可以做成一個fpm狀態監控,通過url獲取的數據中,'listen queue' 表示請求等待隊列,這個參數如果不為0,就表示當前進程數被使用完了,新的請求過來必須進入等待隊列,所以,通過這個參數,就可以判斷是否應該增加進程數或加強伺服器配置