日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

[转]php-fpm配置具体解释

發(fā)布時間:2024/6/30 php 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]php-fpm配置具体解释 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


[轉(zhuǎn)]php-fpm配置具體解釋


php-fpm具體解釋

原文鏈接:http://php-fpm.anight.org/
wiki:http://www.php-fpm.com/
翻譯:http://syre.blogbus.com/logs/20092011.html

什么是 FastCGI

FastCGI 是一個可伸縮、快速的在web server和腳本語言間通迅的接口。關(guān)于FastCGI技術(shù)的很多其它信息能夠在官方站點(diǎn)和Wikipedia看到。

FastCGI 被很多腳本語言所支持,包括 php。假設(shè)用 –enable-fastcgi 選項(xiàng)編譯的話。

多數(shù)流行的web server都支持 FastCGI。

包括Apache(mod_fastcgi和mod_fcgid)。Zeus,nginx和lighttpd。

FastCGI 的主要長處是把動態(tài)語言和 web server 分離開來。這樣的技術(shù)同意 web server 和動態(tài)語言執(zhí)行在不同的主機(jī)上。

這能夠改進(jìn)可擴(kuò)展性和安全性而沒有大的效率損失。

php-fpm 能夠和不論什么支持外部 FastCGI 技術(shù)的 web server 一起使用。

php-fpm是做啥用的

非常不幸,官方站點(diǎn)?php.net?上的 php 在將 FastCGI SAPI 用于生產(chǎn)環(huán)境方面有很多已知的問題。

以下是關(guān)于啟用 FastCGI SAPI 時的問題和 php-fpm 是怎樣解決他們的對照列表。

描寫敘述php自帶的spawn-fcgi?+ spawn-php.sh + daemontoolsphp-fpm
php守護(hù)進(jìn)程化: pid file, log file, setsid(), setuid(), setgid(), chroot()(-)(+)(+)
進(jìn)程管理。能夠用 “graceful” 來停止并啟動 php worker 進(jìn)程而不會丟失請求。能夠平滑地升級配置和二進(jìn)制程序而不丟失不論什么請求。php4 (-), php5 (僅僅有 graceful)(-)(+)
嚴(yán)格限制來源請求的 web server 的 ip 地址php4 (-) php5 (+) (從 5.2.2 開始)(-)(+)
依據(jù)負(fù)載動態(tài)調(diào)整進(jìn)程數(shù)(-)(-)Todo
用不同的 uid/gid/chroot/environment 和不同的 php.ini 選項(xiàng)啟動 worder 進(jìn)程。你不須要 safe mode 了!(-)(-)(+)
記錄 worker 進(jìn)程 stdout 和 stderr 日志(-)(-)(+)
假設(shè)使用優(yōu)化器。在共享內(nèi)存意外破壞的情況下緊急重新啟動全部的進(jìn)程(-)(-)(+)
假設(shè) set_time_limit() 失敗,確保進(jìn)程會結(jié)束(-)(-)(+)
特色功能 Error header、優(yōu)化的上傳支持、fastcgi_finish_request()

特色功能

全部這些特性都是“不打斷”的方式實(shí)現(xiàn)的。也就是說,假設(shè)你不使用它們,它們的存在不會影響php的功能性——他們都是“透明”的。

Error header
范圍:php.ini 選項(xiàng)
分類:便利性

默認(rèn)情況下,假設(shè)被訪問的php腳本包括語法錯誤。用戶會收到一個空的“200 ok”頁。這是不方便的。Error header 這個 php.ini 選項(xiàng)同意在這樣的情況下產(chǎn)生一個 HTTP 錯誤碼,比方“HTTP/1.0 550 Server Made Big Boo”,從而中斷web server請求并顯示一個正確的錯誤頁。

假設(shè)要實(shí)現(xiàn)這樣的功能,須要在 php.ini 中加入一條 fastcgi.error_header = “HTTP/1.0 550 Server Made Big Boo”

在 php-5.2.4 中加入了相似。但不相同的功能:假設(shè)被訪問的php腳本包括語法錯誤,而且 display_errors = off,會立馬返回“HTTP/1.0 500 Internal Server Error”。

假設(shè)你須要設(shè)定一個 503 錯誤,或者想要使這個行為獨(dú)立于 display_errors 的設(shè)置,那么能夠使用fastcgi.error_header。

假設(shè)你在 php-5.2.5 或以上版本號上啟用 php-fpm。那么 fastcgi.error_header的優(yōu)先級更高。

優(yōu)化的上傳支持
實(shí)質(zhì):web server 支持
類型:優(yōu)化

這個特性正如名字那樣,能夠加速對大 POST 請求的處理速度。包括文件上傳。優(yōu)化是通過將請求體已寫入一個暫時文件,然后 fastcgi 協(xié)議傳遞文件名稱而不是請求體到來實(shí)現(xiàn)的。眼下就我所知,僅僅有 nginx0.5.9 以上才支持這個功能。

顯然。這樣的模式僅僅在 php 和 web server 在一臺機(jī)器上的時候才干用。

nginx?樣例配置:

location ~ .php$ {
fastcgi_pass_request_body off;
client_body_in_file_only clean;
fastcgi_param? REQUEST_BODY_FILE? ?$request_body_file;

fastcgi_pass …;
}

在php中不須要配置不論什么東西。假設(shè)php收到了參數(shù)REQUEST_BODY_FILE。就讀取其中的請求體,假設(shè)沒有,就自行從fastcgi 協(xié)議中讀取請求體。

結(jié)合這個特性。能夠考慮對暫時文件使用內(nèi)存文件系統(tǒng),比如tmpfs(linux):

client_body_temp_path /dev/shm/client_body_temp;

fastcgi_finish_request()
范圍:php 函數(shù)
類型:優(yōu)化

這個特性能夠提高一些 php 請求的處理速度。

假設(shè)有些處理能夠在頁面生成完后進(jìn)行,就能夠使用這樣的優(yōu)化。比方,在 memcached 中保存 session 就能夠在頁面交給 web server 后進(jìn)行。fastcgi_finisth_request() ,這一特性能夠結(jié)束響應(yīng)輸出,web server 能夠馬上開始交給等不及的客戶端。而此刻,php 能夠在請求的上下文環(huán)境中處理很多事情。比方保存session。轉(zhuǎn)換上傳的視頻,處理統(tǒng)計(jì)等等。

fastcgi_finisth_request() 會觸發(fā) shutdown 函數(shù)執(zhí)行。

request_slowlog_timeout
范圍: php-fpm.conf 選項(xiàng)
分類: 方便

這個選項(xiàng)能讓你跟蹤執(zhí)行緩慢的腳本并把他們連同調(diào)用棧一起記錄再日志文件里。

比如例如以下設(shè)置:

5s
logs/slow.log

記錄的 slow.log 可能是這個樣子:

Sep 21 16:22:19.399162 pid 29715 (pool default)
script_filename =? /local/www/stable/www/catalogue.php
[0x00007fff23618120] mysql_query()? /srv/stable/common/Database/class.MySQLRequest.php:20
[0x00007fff23618560]? getResult() /srv/stable/common/Database/class.Facade.php:106
[0x00007fff23618aa0] query()? /srv/stable/common/mysite.com/ORM/class.UsersMapper.php:99
[0x00007fff23618d60] resolveByID()? /srv/stable/common/mysite.com/ORM/class.User.php:629
[0x00007fff236193b0]? getData() /srv/stable/common/class.DataEntity.php:90
[0x00007fff236195d0]? load() /srv/stable/common/mysite.com/ORM/class.User.php:587
[0x00007fff23619a00] getIsHidden()? /srv/stable/common/mysite.com/class.User.php:42
[0x00007fff2361a470]? getName() /local/www/stable/www/catalogue.php:41

同一時候,在 error.log 中保存了例如以下記錄:

Sep 21 16:22:19.399031 [WARNING] fpm_request_check_timed_out(), line 135:? child 29715, script ‘/local/www/stable/www/catalogue.php’ (pool default)? executing too slow (5.018002 sec), logging

正如你再樣例中看到的。腳本執(zhí)行了 5 秒以上,并非??赡苁且?yàn)?mysql?響應(yīng)慢造成的(top backtrace)。

FAQ

Q:php-fpm 能夠和 ZendOptimize 一起用嗎?
A:全然能夠。

Q:php-fpm 能夠和 ZendPlatform、xcache、eAccelerator、APC 等的優(yōu)化器一起用嗎?
A:是的。php-fpm 的架構(gòu)和不論什么一種用于快速 opcode 緩存的共享內(nèi)存都適用。

唯一的限制是:全部的 worker 進(jìn)程僅僅能適用一個緩存,即使它們用不同的 uid/gid 執(zhí)行

Q:為什么我要給 php 打補(bǔ)丁呢?spawn-fcgi 不須要這樣。
A:php-fpm 的創(chuàng)建是為了增強(qiáng)方便管理。沒有打過補(bǔ)丁的 php 不能做到:

平滑重新啟動 php 而不丟失請求。包括升級 php 二進(jìn)制文件 以及/或者 擴(kuò)展。


用不同的 uid / gid / chroot 環(huán)境執(zhí)行 worker 進(jìn)程
全部的設(shè)置僅僅有一個配置文件
依據(jù)負(fù)載動態(tài)請求 (TODO)
對 php 請求實(shí)時統(tǒng)計(jì)性能 (TODO)

Q:為什么要用 root 執(zhí)行 php-fpm 呢?這安全嗎?
A:用 root 啟動 php-fpm 僅僅有在你打算用不同 uid/gid 的 php 來處理請求時才有意義。比方,在共享主機(jī)上的不同站點(diǎn)。

因?yàn)閮H僅有在 master 進(jìn)程用 root 執(zhí)行的時候。才干夠建立不同 uid/gid 的子進(jìn)程。這是相當(dāng)安全的。master 進(jìn)程自己從來不會去處理請求。


在不論什么情況下。php- fpm 都不會用 root 身份來處理請求。

Q:php-fpm 能夠加速 php 腳本處理速度嗎?
A:不,它不會影響處理速度。只是。假設(shè)你使用一些特殊特性,對于一些特定的請求還是能夠有性能提升的。

Q:假設(shè)我把我的站點(diǎn)從 mod_php 遷移到 php-fpm 。我會得到性能提升嗎?
A:通常,當(dāng)有服務(wù)器上有大量空暇內(nèi)存可用時,能從遷移到 php-fpm 中得到的性能提升可能不大。可是假設(shè)內(nèi)存并不充裕,性能提升還是非??捎^的,在某些情況下能夠達(dá)到 300-500%。這可能是因?yàn)?nginx + php-fpm 通常會比?Apache?+ mod_php 使用更少的內(nèi)存。

而且 VFS 緩存會因?yàn)楹芏嗥渌目沼鄡?nèi)存而更有效地工作。

Q:php- fpm 將來會被官方的 php 包括嗎?
A:我希望如此。眼下。php-fpm 代碼的協(xié)議是 GPL 。所以如今 php-fpm 的代碼與 php 協(xié)議(相似 bsd)并不匹配。這是暫時性措施。這樣的選擇是為了簡化開發(fā)過程。一旦代碼的功能完備,比方自適應(yīng)生成子進(jìn)程和其它一些東西,協(xié)議會改為一個相匹配的。之后,php-fpm 會正式公布給 php 開發(fā)團(tuán)隊(duì),并被建議包括。

郵件列表

假設(shè)你有問題的話,請不要猶豫在郵件組里寫郵件。

English:?highload-php-en?Russian:?highload-php-ru

文檔

php-fpm 已經(jīng)在 Linux、MacOSX、Solaris?和 FreeBSD 上測試通過。

確信 libxml2(在某些系統(tǒng)上叫做libxml2-devel)已經(jīng)安裝。

下載最小的?php?和?php-fpm

$ bzip2 -cd php-5.2.5.tar.bz2 | tar xf -
$ gzip -cd php-5.2.5-fpm-0.5.7.diff.gz | patch -d php-5.2.5 -p1
$ cd php-5.2.5
$ ./configure –enable-fastcgi –enable-fpm
$ make all install

編輯

$prefix/etc/php-fpm.conf

執(zhí)行

$prefix/bin/php-cgi –fpm

細(xì)致檢查

$prefix/logs/php-fpm.log

執(zhí)行 phpinfo() 檢查你的站點(diǎn)是否還正常執(zhí)行

master 進(jìn)程的 pid 被存放在

$prefix/logs/php-fpm.pid

master進(jìn)程能夠理解以下信號:

SIGINT, SIGTERM立馬終止
SIGQUIT平滑終止
SIGUSR1又一次打開日志文件
SIGUSR2平滑重載全部worker進(jìn)程并又一次加載配置和二進(jìn)制

關(guān)于

嗨。我的名字叫 Andrei Nigmatulin, 我是 php-fpm 的作者。

從 2004 年開始。我就在等有什么人讓 PHP FastCGI 能滿足產(chǎn)品環(huán)境。但我等不下去了。

php-fpm 是在數(shù)個項(xiàng)目種使用 PHP 的 FastCGI SAPI 中的知識、經(jīng)驗(yàn)和想法的產(chǎn)物。

php-fpm 能夠在 GPL 協(xié)議下用在公共用途。

和 php-fpm 綁定的改動版的?libevent?是在 BSD 協(xié)議下公布的。

我須要得到您的反饋——新的想法和建議——來改進(jìn)和優(yōu)化 php FastCGI SAPI。

假設(shè)您有什么想法、意見、補(bǔ)充和建議。我會非常高興。非常原意聽取,或許還會實(shí)現(xiàn)他們。給給我發(fā)郵件吧。(地址在本頁的末尾)。

假設(shè)你想支持 php-fpm 的開發(fā)。能夠作一些捐贈: Paypal Yandex.Money

15/05/2007 – 第一次提交到 php-fpm.

andrei dot nigmatulin at gmail dot com
譯注:
php-fpm還帶有一個更方便的腳本,在$prefix/sbin/php-fpm。

能夠用php-fpm start|graceful|restart|stop來維護(hù)。稍編輯一下就能夠讓它使用配置文件。

后記:

最開始,php-fpm 僅僅有俄文文檔,弄的我非常郁悶。于是我先用?google?翻譯先弄成英文。然后再人工翻成中文。這其中會難免會在我自己的英文水平引起的錯誤之外,再多些錯誤出來。

后來最終有了一個英文的 wiki。并邀請我提供中文翻譯。

同一時候,距上一次翻譯(2008年5月)以后。原來的文檔也已經(jīng)有了更新。于是我就依據(jù)英文 wiki ,又一次翻譯了一遍。


http://www.ha97.com/95.html

來源:http://blog.chinaunix.net/uid-10565106-id-3313429.html




php-fpm 啟動參數(shù)及重要配置具體解釋



約定幾個文件夾

  • /usr/local/php/sbin/php-fpm
  • /usr/local/php/etc/php-fpm.conf
  • /usr/local/php/etc/php.ini

一,php-fpm的啟動參數(shù)

12345678910111213#測試php-fpm配置/usr/local/php/sbin/php-fpm?-t/usr/local/php/sbin/php-fpm?-c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf -t#啟動php-fpm/usr/local/php/sbin/php-fpm/usr/local/php/sbin/php-fpm?-c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf#關(guān)閉php-fpmkill?-INT `cat?/usr/local/php/var/run/php-fpm.pid`#重新啟動php-fpmkill?-USR2 `cat?/usr/local/php/var/run/php-fpm.pid`

二,php-fpm.conf重要參數(shù)具體解釋

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879pid = run/php-fpm.pid#pid設(shè)置,默認(rèn)在安裝文件夾中的var/run/php-fpm.pid。建議開啟error_log = log/php-fpm.log#錯誤日志,默認(rèn)在安裝文件夾中的var/log/php-fpm.loglog_level = notice#錯誤級別. 可用級別為: alert(必須馬上處理), error(錯誤情況), warning(警告情況), notice(一般重要信息), debug(調(diào)試信息). 默認(rèn): notice.emergency_restart_threshold = 60emergency_restart_interval = 60s#表示在emergency_restart_interval所設(shè)值內(nèi)出現(xiàn)SIGSEGV或者SIGBUS錯誤的php-cgi進(jìn)程數(shù)假設(shè)超過 emergency_restart_threshold個,php-fpm就會優(yōu)雅重新啟動。這兩個選項(xiàng)一般保持默認(rèn)值。process_control_timeout = 0#設(shè)置子進(jìn)程接受主進(jìn)程復(fù)用信號的超時時間. 可用單位: s(秒), m(分), h(小時), 或者 d(天) 默認(rèn)單位: s(秒). 默認(rèn)值: 0.daemonize = yes#后臺執(zhí)行fpm,默認(rèn)值為yes,假設(shè)為了調(diào)試能夠改為no。在FPM中,能夠使用不同的設(shè)置來執(zhí)行多個進(jìn)程池。 這些設(shè)置能夠針對每一個進(jìn)程池單獨(dú)設(shè)置。listen = 127.0.0.1:9000#fpm監(jiān)聽端口。即nginx中php處理的地址。一般默認(rèn)值就可以。可用格式為: 'ip:port', 'port', '/path/to/unix/socket'. 每一個進(jìn)程池都須要設(shè)置.listen.backlog = -1#backlog數(shù),-1表示無限制。由操作系統(tǒng)決定,此行凝視掉就可以。

backlog含義參考:http://www.3gyou.cc/?p=41

listen.allowed_clients = 127.0.0.1#同意訪問FastCGI進(jìn)程的IP,設(shè)置any為不限制IP,假設(shè)要設(shè)置其它主機(jī)的nginx也能訪問這臺FPM進(jìn)程。listen處要設(shè)置成本地可被訪問的IP。

默認(rèn)值是any。每一個地址是用逗號分隔. 假設(shè)沒有設(shè)置或者為空,則同意不論什么服務(wù)器請求連接

listen.owner = wwwlisten.group = wwwlisten.mode = 0666#unix socket設(shè)置選項(xiàng),假設(shè)使用tcp方式訪問。這里凝視就可以。

user = wwwgroup = www#啟動進(jìn)程的帳戶和組pm = dynamic #對于專用服務(wù)器,pm能夠設(shè)置為static。#怎樣控制子進(jìn)程,選項(xiàng)有static和dynamic。假設(shè)選擇static。則由pm.max_children指定固定的子進(jìn)程數(shù)。假設(shè)選擇dynamic,則由下開參數(shù)決定:pm.max_children #。子進(jìn)程最大數(shù)pm.start_servers #,啟動時的進(jìn)程數(shù)pm.min_spare_servers #,保證空暇進(jìn)程數(shù)最小值,假設(shè)空暇進(jìn)程小于此值,則創(chuàng)建新的子進(jìn)程pm.max_spare_servers #,保證空暇進(jìn)程數(shù)最大值,假設(shè)空暇進(jìn)程大于此值,此進(jìn)行清理pm.max_requests = 1000#設(shè)置每一個子進(jìn)程重生之前服務(wù)的請求數(shù). 對于可能存在內(nèi)存泄漏的第三方模塊來說是非常實(shí)用的. 假設(shè)設(shè)置為 '0' 則一直接受請求. 等同于 PHP_FCGI_MAX_REQUESTS 環(huán)境變量. 默認(rèn)值: 0.pm.status_path = /status#FPM狀態(tài)頁面的網(wǎng)址. 假設(shè)沒有設(shè)置, 則無法訪問狀態(tài)頁面. 默認(rèn)值: none. munin監(jiān)控會使用到ping.path = /ping#FPM監(jiān)控頁面的ping網(wǎng)址. 假設(shè)沒有設(shè)置, 則無法訪問ping頁面. 該頁面用于外部檢測FPM是否存活而且能夠響應(yīng)請求. 請注意必須以斜線開頭 (/)。ping.response = pong#用于定義ping請求的返回相應(yīng). 返回為 HTTP 200 的 text/plain 格式文本. 默認(rèn)值: pong.request_terminate_timeout = 0#設(shè)置單個請求的超時中止時間. 該選項(xiàng)可能會對php.ini設(shè)置中的'max_execution_time'因?yàn)槟承┨厥庠驔]有中止執(zhí)行的腳本實(shí)用. 設(shè)置為 '0' 表示 'Off'.當(dāng)常常出現(xiàn)502錯誤時能夠嘗試更改此選項(xiàng)。

request_slowlog_timeout = 10s#當(dāng)一個請求該設(shè)置的超時時間后,就會將相應(yīng)的PHP調(diào)用堆棧信息完整寫入到慢日志中. 設(shè)置為 '0' 表示 'Off'slowlog = log/$pool.log.slow#慢請求的記錄日志,配合request_slowlog_timeout使用rlimit_files = 1024#設(shè)置文件打開描寫敘述符的rlimit限制. 默認(rèn)值: 系統(tǒng)定義值默認(rèn)可打開句柄是1024,可使用 ulimit -n查看,ulimit -n 2048改動。rlimit_core = 0#設(shè)置核心rlimit最大限制值. 可用值: 'unlimited' 、0或者正整數(shù). 默認(rèn)值: 系統(tǒng)定義值.chroot =#啟動時的Chroot文件夾. 所定義的文件夾須要是絕對路徑. 假設(shè)沒有設(shè)置, 則chroot不被使用.chdir =#設(shè)置啟動文件夾。啟動時會自己主動Chdir到該文件夾. 所定義的文件夾須要是絕對路徑. 默認(rèn)值: 當(dāng)前文件夾?;蛘?文件夾(chroot時)catch_workers_output = yes#重定向執(zhí)行過程中的stdout和stderr到基本的錯誤日志文件里. 假設(shè)沒有設(shè)置, stdout 和 stderr 將會依據(jù)FastCGI的規(guī)則被重定向到 /dev/null . 默認(rèn)值: 空.

三,常見錯誤及解決的方法整理

1,request_terminate_timeout引起的資源問題

request_terminate_timeout的值假設(shè)設(shè)置為0或者過長的時間,可能會引起file_get_contents的資源問題。

假設(shè)file_get_contents請求的遠(yuǎn)程資源假設(shè)反應(yīng)過慢,file_get_contents就會一直卡在那里不會超時。我們知道php.ini 里面max_execution_time 能夠設(shè)置 PHP 腳本的最大執(zhí)行時間,可是。在 php-cgi(php-fpm) 中,該參數(shù)不會起效。真正能夠控制 PHP 腳本最大執(zhí)行時間的是 php-fpm.conf 配置文件里的request_terminate_timeout參數(shù)。

request_terminate_timeout默認(rèn)值為 0 秒,也就是說,PHP 腳本會一直執(zhí)行下去。這樣,當(dāng)全部的 php-cgi 進(jìn)程都卡在 file_get_contents() 函數(shù)時,這臺 Nginx+PHP 的 WebServer 已經(jīng)無法再處理新的 PHP 請求了,Nginx 將給用戶返回“502 Bad Gateway”。改動該參數(shù),設(shè)置一個 PHP 腳本最大執(zhí)行時間是必要的,可是,治標(biāo)不治本。比如改成 30s,假設(shè)發(fā)生 file_get_contents() 獲取網(wǎng)頁內(nèi)容較慢的情況,這就意味著 150 個 php-cgi 進(jìn)程,每秒鐘僅僅能處理 5 個請求。WebServer 相同非常難避免”502 Bad Gateway”。解決的方法是request_terminate_timeout設(shè)置為10s或者一個合理的值,或者給file_get_contents加一個超時參數(shù)。

1234567$ctx?= stream_context_create(array(????'http'?=> array(????????'timeout'?=> 10??? //設(shè)置一個超時時間,單位為秒????)));file_get_contents($str, 0, $ctx);

2,max_requests參數(shù)配置不當(dāng),可能會引起間歇性502錯誤:

1pm.max_requests = 1000

設(shè)置每一個子進(jìn)程重生之前服務(wù)的請求數(shù). 對于可能存在內(nèi)存泄漏的第三方模塊來說是非常實(shí)用的. 假設(shè)設(shè)置為 ’0′ 則一直接受請求. 等同于 PHP_FCGI_MAX_REQUESTS 環(huán)境變量. 默認(rèn)值: 0.
這段配置的意思是。當(dāng)一個 PHP-CGI 進(jìn)程處理的請求數(shù)累積到 500 個后,自己主動重新啟動該進(jìn)程。

可是為什么要重新啟動進(jìn)程呢?

一般在項(xiàng)目中,我們多多少少都會用到一些 PHP 的第三方庫,這些第三方庫常常存在內(nèi)存泄漏問題,假設(shè)不定期重新啟動 PHP-CGI 進(jìn)程。勢必造成內(nèi)存使用量不斷增長。因此 PHP-FPM 作為 PHP-CGI 的管理器。提供了這么一項(xiàng)監(jiān)控功能。對請求達(dá)到指定次數(shù)的 PHP-CGI 進(jìn)程進(jìn)行重新啟動。保證內(nèi)存使用量不增長。

正是因?yàn)檫@個機(jī)制,在高并發(fā)的站點(diǎn)中,常常導(dǎo)致 502 錯誤,我推測原因是 PHP-FPM 對從 NGINX 過來的請求隊(duì)列沒處理好。只是我眼下用的還是 PHP 5.3.2。不知道在 PHP 5.3.3 中是否還存在這個問題。

眼下我們的解決方法是。把這個值盡量設(shè)置大些。盡可能降低 PHP-CGI 又一次 SPAWN 的次數(shù)。同一時候也能提高整體性能。在我們自己實(shí)際的生產(chǎn)環(huán)境中發(fā)現(xiàn),內(nèi)存泄漏并不明顯。因此我們將這個值設(shè)置得非常大(204800)。大家要依據(jù)自己的實(shí)際情況設(shè)置這個值,不能盲目地加大。

話說回來,這套機(jī)制目的僅僅為保證 PHP-CGI 只是分地占用內(nèi)存。為何不通過檢測內(nèi)存的方式來處理呢?我非常認(rèn)同高春輝所說的,通過設(shè)置進(jìn)程的峰值內(nèi)在占用量來重新啟動 PHP-CGI 進(jìn)程,會是更好的一個解決方式。

3,php-fpm的慢日志。debug及異常排查神器:

request_slowlog_timeout設(shè)置一個超時的參數(shù)。slowlog設(shè)置慢日志的存放位置

1tail?-f /var/log/www.slow.log

上面的命令就可以看到執(zhí)行過慢的php過程。


大家能夠看到常常出現(xiàn)的網(wǎng)絡(luò)讀取超過、Mysql查詢過慢的問題,依據(jù)提示信息再排查問題就有非常明白的方向了。



php-fpm 5.3+ 怎樣關(guān)閉 重新啟動?

php 5.3+ 下的php-fpm 不再支持 php-fpm 曾經(jīng)具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,須要使用信號控制:

master進(jìn)程能夠理解以下信號

INT, TERM 立馬終止 QUIT 平滑終止 USR1 又一次打開日志文件 USR2 平滑重載全部worker進(jìn)程并又一次加載配置和二進(jìn)制模塊

演示樣例:

php-fpm 關(guān)閉:

kill -INT `cat /usr/local/php/var/run/php-fpm.pid`

php-fpm 重新啟動:

kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

查看php-fpm進(jìn)程數(shù):

ps aux | grep -c php-fpm

8.命令行下執(zhí)行php,提示找不到命令

-bash: /usr/bin/php: No such file or directory

vi /etc/profile

在文件底部添加一行配置
export PATH=/usr/local/php/bin:$PATH

保存退出

source /etc/profile


來源:http://www.cnblogs.com/argb/p/3604340.html



php-fpm參數(shù)優(yōu)化

php-fpm進(jìn)程設(shè)置多少合適,設(shè)成動態(tài)還是靜態(tài)?

《lnmp一鍵安裝包》中會依據(jù)你服務(wù)器內(nèi)存調(diào)整php-fpm進(jìn)程數(shù)。

以下是摘自Google討論話題:《?PHP-FPM on highload tips?》[墻外。翻墻可參考goagent]。

When you running a highload website with PHP-FPM via FastCGI, the following tips may be useful to you
假設(shè)你的高負(fù)載站點(diǎn)使用PHP-FPM管理FastCGI?;蛟S以下這些技巧對你實(shí)用

1. Compile PHP's modules as less as possible, the simple the best (fast);?
盡量少安裝PHP模塊。最簡單是最好(快)的

2. Increas PHP FastCGI child number to 100 and even more. Sometime, 200 is OK! ( On 4GB memory server);?
把你的PHP FastCGI子進(jìn)程數(shù)調(diào)到100或以上,在4G內(nèi)存的服務(wù)器上200就能夠(建議壓力測試來得出自己服務(wù)器合理的值

3. Using SOCKET PHP FastCGI, and put into /dev/shm on Linux;?
socket連接FastCGI。/dev/shm是內(nèi)存文件系統(tǒng),socket放在內(nèi)存中肯定會快些

4. Increase Linux "max open files", using the following command (must be root):?
Linux下添加文件打開數(shù),命令例如以下:

cat >> /etc/security/limits.conf <<EOF * soft nproc 65535 * hard nproc 65535 * soft nofile 65535 * hard nofile 65535 EOF

5. Increase PHP-FPM open file description rlimit:?
添加 PHP-FPM 打開文件描寫敘述符的限制:

# vi $php_install_dir/etc/php-fpm.conf rlimit_files = 51200

6. Using PHP code accelerator, e.g eAccelerator, XCache. And set "cache_dir" to /dev/shm on Linux.
使用php代碼加速器,比如 eAccelerator, XCache.在Linux平臺上能夠把`cache_dir`指向 /dev/shm

/usr/local/php/etc/php-fpm.conf重要優(yōu)化參數(shù)具體解釋:

pm = dynamic

pm參數(shù)指定了進(jìn)程管理方式,有兩種可供選擇:static或dynamic。從字面意思不難理解。為靜態(tài)或動態(tài)方式。假設(shè)是靜態(tài)方式。那么在php-fpm啟動的時候就創(chuàng)建了指定數(shù)目的進(jìn)程,在執(zhí)行過程中不會再有變化(并非真的就永遠(yuǎn)不變)。而動態(tài)的則在執(zhí)行過程中動態(tài)調(diào)整。當(dāng)然并非無限制的創(chuàng)建新進(jìn)程,受pm.max_spare_servers參數(shù)影響;動態(tài)適合小內(nèi)存機(jī)器,靈活分配進(jìn)程,省內(nèi)存。靜態(tài)適用于大內(nèi)存機(jī)器。動態(tài)創(chuàng)建回收進(jìn)程對服務(wù)器資源也是一種消耗

pm.max_children = 24

static模式下創(chuàng)建的子進(jìn)程數(shù)或dynamic模式下同一時刻同意最大的php-fpm子進(jìn)程數(shù)量

pm.start_servers = 16

#動態(tài)方式下的起始php-fpm進(jìn)程數(shù)量

pm.min_spare_servers = 12

#動態(tài)方式下服務(wù)器空暇時最小php-fpm進(jìn)程數(shù)量

pm.max_spare_servers = 24

#動態(tài)方式下服務(wù)器空暇時最大php-fpm進(jìn)程數(shù)量

一般php-fpm進(jìn)程占用20~30m左右的內(nèi)存就按30m算。

假設(shè)單獨(dú)跑php-fpm,動態(tài)方式起始值可設(shè)置物理內(nèi)存Mem/30M,因?yàn)榇蠹乙话鉔ginx、MySQL都在一臺機(jī)器上。于是預(yù)留一半給它們,即php-fpm進(jìn)程數(shù)為$Mem/2/30。

LNMP在一臺機(jī)器上參數(shù)(僅供參考。建議壓力測試得出):

Mem=`free -m | awk '/Mem:/{print $2}'` #我的機(jī)器內(nèi)存是987M sed -i "s@^pm.max_children.*@pm.max_children = $(($Mem/2/20))@" $php_install_dir/etc/php-fpm.conf sed -i "s@^pm.start_servers.*@pm.start_servers = $(($Mem/2/30))@" $php_install_dir/etc/php-fpm.conf sed -i "s@^pm.min_spare_servers.*@pm.min_spare_servers = $(($Mem/2/40))@" $php_install_dir/etc/php-fpm.conf sed -i "s@^pm.max_spare_servers.*@pm.max_spare_servers = $(($Mem/2/20))@" $php_install_dir/etc/php-fpm.conf

987M內(nèi)存:

pm = dynamic pm.max_children = 24 pm.start_servers = 16 pm.min_spare_servers = 12 pm.max_spare_servers = 24

來源:https://blog.linuxeye.com/380.html





轉(zhuǎn)載于:https://www.cnblogs.com/yfceshi/p/7256055.html

總結(jié)

以上是生活随笔為你收集整理的[转]php-fpm配置具体解释的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。