當前位置:首頁 » 編程語言 » phpfpm500

phpfpm500

發布時間: 2022-04-16 08:03:44

php-fpm的簡介

PHP-FPM(FastCGI Process Manager:FastCGI進程管理器)對於PHP 5.3.3之前的php來說,是一個補丁包 ,旨在將FastCGI進程管理整合進PHP包中。如果你使用的是PHP5.3.3之前的PHP的話,就必須將它patch到你的PHP源代碼中,在編譯安裝PHP後才可以使用。
從PHP 5.4 RC2開始,php-fpm已經轉正了,不再被php團隊標注為EXPERIMENTAL(實驗性的東西) 。
相對Spawn-FCGI,PHP-FPM在CPU和內存方面的控制都更勝一籌,而且前者很容易崩潰,必須用crontab進行監控,而PHP-FPM則沒有這種煩惱。
PHP5.3.3已經集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP進程管理方式,可以有效控制內存和進程、可以平滑重載PHP配置,比spawn-fcgi具有更多優點,所以被PHP官方收錄了。在./configure的時候帶 –enable-fpm參數即可開啟PHP-FPM。
使用PHP-FPM來控制PHP-CGI的FastCGI進程
/usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate}
--start 啟動php的fastcgi進程
--stop 強制終止php的fastcgi進程
--quit 平滑終止php的fastcgi進程
--restart 重啟php的fastcgi進程
--reload 重新平滑載入php的php.ini
--logrotate 重新啟用log文件

⑵ 如何減少PHP-FPM的內存佔用

你可以在/etc/php5/fpm/pool.d目錄下發現這些低效的配置選項。舉例來說,以下是我的伺服器(當然不是目前這個站點)上的那些低效選項:

; Choose how the process manager will control the number of child processes.
pm = dynamic
pm.max_children = 75
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500
那台伺服器是一台DigitalOcean Droplet,配置512M內存。它上面運行了一個新網站,即使完全空閑時,也必須要靠交換內存才能避免僵死。執行top命令顯示了伺服器上佔用內存最多的進程。

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
13891 cont 20 396944 56596 33416 S 0.0 11.3 :14.05 php5-fpm
13889 cont 20 396480 56316 32916 S 0.0 11.2 :17.67 php5-fpm
13887 cont 20 624212 55088 32008 S 0.0 11.0 :14.02 php5-fpm

⑶ php-fpm佔用內存過高 怎麼定位

NGINX下PHP-FPM佔用內存狀態及進程數調整
網站出現500,查看SLOWLOG日誌發現如下提示:
[html] view plain 在CODE上查看代碼片派生到我的代碼片
WARNING: [pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 8 idle, and 58 total children
WARNING: [pool www] server reached pm.max_children setting (50), consider raising it
昨天晚上剛改的看來又不夠用了!
查看PHP-FPM內存佔用的幾個有用小命令,記錄如下:
1.查看每個FPM的內存佔用:
[vb] view plain 在CODE上查看代碼片派生到我的代碼片
ps -ylC php-fpm --sort:rss
當然,在後後面加 | wc -l可查看系統當前FPM總進程數,我的目前在45個左右。
PHP官方的建議設置值:
pm.max_children = Total RAM dedicated to the web server / Max child process size
2.查看FPM在你的機子上的平均內存佔用:
[python] view plain 在CODE上查看代碼片派生到我的代碼片
ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'

⑷ nginx phpfpm 500 錯誤 但是會返回 php 結果,這個是什麼問題

這個問題已經有人回答了,就是selinux導致的許可權問題。,所以你的問題解決了!⊙ω⊙還有什麼可以在後盾人找到詳解!(▼皿▼#)

⑸ php-fpm 正常啟動,nginx也正常啟動,但是為什麼訪問PHP是502

我覺得應該是sybase_connect連上資料庫
語法: int sybase_connect(string [servername], string [username], string [password]);
返回值: 整數函數種類: 資料庫功能 本函數用來打開與 Sybase 資料庫的連接。
參數 servername 為欲連上的資料庫伺服器名稱。
參數 username 及 password 可省略,分別為連接使用的帳號及密碼。
使用本函數需注意早點關閉資料庫,以減少系統的負擔。
連接成功則返回資料庫的連接代號,失敗返回 false 值。
您試試在將地址後面加了一個?a=1。如果還有不懂的可以去後盾人找找相關的教學視頻看看,多看看不就懂得懂了,希望對你有用,給個採納吧,謝謝

⑹ 啟動php-fpm時是怎麼載入php.ini

php.ini:決定php語言運行的環境,支持擴展的模塊,開發環境的配置

php-fpm.conf:進程式控制制管理器配置文件,控制php-cgi的進程數,常駐內存,提高web服務的響應速率,php-cgi運行時會載入這兩個配置文件。

⑺ php-fpm的特色功能

所有這些特性都是「不打斷」的方式實現的。也就是說,如果你不使用它們,它們的存在不會影響php的功能性——他們都是「透明」的。
Error header
范圍:php.ini 選項
分類:便利性
默認情況下,如果被訪問的php腳本包含語法錯誤,用戶會收到一個空的「200 ok」頁。這是不方便的。Error header 這個php.ini 選項允許在這種情況下產生一個 HTTP錯誤碼,比如「HTTP/1.0 550 Server Made Big Boo」,從而中斷web server請求並顯示一個正確的錯誤頁。
如果要實現這樣的功能,需要在php.ini 中添加一條fastcgi.error_header = HTTP/1.0 550 Server Made Big Boo
在php-5.2.4 中添加了類似,但不相同的功能:如果被訪問的php腳本包含語法錯誤,並且 display_errors = off,會立刻返回「HTTP/1.0 500 Internal Server Error」。
如果你需要設定一個 503錯誤,或者想要使這個行為獨立於 display_errors 的設置,那麼可以使用fastcgi.error_header。如果你在php-5.2.5 或以上版本上啟用 php-fpm,那麼fastcgi.error_header的優先順序更高。
優化的上傳支持
實質:web server 支持
類型:優化
這個特性正如名字那樣,可以加速對大 POST 請求的處理速度,包括文件上傳。優化是通過將請求體已寫入一個臨時文件,然後fastcgi協議傳遞文件名而不是請求體到來實現的。只有 nginx0.5.9 以上才支持這個功能。顯然,這種模式只在php和 web server 在一台機器上的時候才能用。
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中不需要配置任何東西。如果php收到了參數REQUEST_BODY_FILE,就讀取其中的請求體,如果沒有,就自行從fastcgi協議中讀取請求體。
結合這個特性,可以考慮對臨時文件使用內存文件系統,例如tmpfs(linux):
client_body_temp_path /dev/shm/client_body_temp;
fastcgi_finish_request()
范圍:php函數
類型:優化
這個特性可以提高一些php請求的處理速度。如果有些處理可以在頁面生成完後進行,就可以使用這種優化。比如,在 memcached 中保存 session 就可以在頁面交給 web server 後進行。fastcgi_finisth_request() ,這一特性可以結束響應輸出,web server 可以立即開始交給等不及的客戶端,而此刻,php可以在請求的上下文環境中處理許多事情。比如保存session,轉換上傳的視頻,處理統計等等。
fastcgi_finisth_request() 會觸發 shutdown 函數運行。
request_slowlog_timeout
范圍:php-fpm.conf 選項
分類: 方便
這個選項能讓你跟蹤執行緩慢的腳本並把他們連同調用棧一起記錄在日誌文件中。例如如下設置:
<value name=request_slowlog_timeout>5s</value>
<value name=slowlog>logs/slow.log</value>
正如你再例子中看到的,腳本運行了 5 秒以上,並很可能是由於 mysql 響應慢造成的(top backtrace)。

⑻ php-fpm的FAQ

Q:php-fpm 可以和 ZendOptimize 一起用嗎?
A:完全可以。
Q:php-fpm 可以和 ZendPlatform、xcache、eAccelerator、APC 等的優化器一起用嗎?
A:是的。php-fpm 的架構和任何一種用於高速 opcode 緩存的共享內存都適用。唯一的限制是:所有的 worker 進程只能適用一個緩存,即使它們用不同的 uid/gid 運行
Q:為什麼我要給php打補丁呢?spawn-fcgi 不需要這樣!
A:php-fpm 的創建是為了增強方便管理。沒有打過補丁的php不能做到:
平滑重啟php而不丟失請求,包括升級 php二進制文件以及/或者 擴展。
用不同的 uid / gid / chroot 環境運行 worker 進程
所有的設置只有一個配置文件
根據負載動態請求 (TODO)
對php請求實時統計性能 (TODO)
Q:為什麼要用 root 運行php-fpm 呢?這安全嗎?
A:用 root 啟動php-fpm 只有在你打算用不同 uid/gid 的 php 來處理請求時才有意義。比如,在共享主機上的不同站點。因為只有在 master 進程用 root 運行的時候,才可以建立不同 uid/gid 的子進程。這是相當安全的。master 進程自己從來不會去處理請求。
在任何情況下,php-fpm 都不會用 root 身份來處理請求。
Q:php-fpm 可以加速 php 腳本處理速度嗎?
A:不,它不會影響處理速度。不過,如果你使用一些特殊特性,對於一些特定的請求還是可以有性能提升的。
Q:如果我把我的網站從 mod_php遷移到php-fpm ,我會得到性能提升嗎?
A:通常,當有伺服器上有大量空閑內存可用時,能從遷移到 php-fpm 中得到的性能提升可能不大。但是如果內存並不充裕,性能提升還是很可觀的,在某些情況下可以達到 300-500%。這可能是由於 nginx +php-fpm 一般會比 Apache + mod_php 使用更少的內存。而且 VFS 緩存會由於更多的空餘內存而更有效地工作。
Q:php-fpm 將來會被官方的 php 包含嗎?
A:我希望如此。php-fpm 代碼採用的是GPL許可證 。所以現在php-fpm 的代碼與 php 協議(類似BSD許可證)並不匹配 。這是臨時性措施。這樣的選擇是為了簡化開發過程。一旦代碼的功能完備,比如自適應生成子進程和其他一些東西,協議會改為一個相匹配的。之後,php-fpm 會正式發布給 php 開發團隊,並被建議包含。

⑼ php5-cgi和php5-fpm 這兩個東西是什麼意思啊有什麼區別怎麼使用

CGI

CGI全稱是「公共網關介面」(Common Gateway Interface),HTTP伺服器與你的或其它機器上的程序進行「交談」的一種工具,其程序須運行在網路伺服器上。

CGI可以用任何一種語言編寫,只要這種語言具有標准輸入、輸出和環境變數。如php,perl,tcl等。

FastCGI

FastCGI像是一個常駐(long-live)型的CGI,它可以一直執行著,只要激活後,不會每次都要花費時間去fork一次(這是CGI最為人詬病的fork-and-execute 模式)。它還支持分布式的運算,即 FastCGI 程序可以在網站伺服器以外的主機上執行並且接受來自其它網站伺服器來的請求。

FastCGI是語言無關的、可伸縮架構的CGI開放擴展,其主要行為是將CGI解釋器進程保持在內存中並因此獲得較高的性能。眾所周知,CGI解釋器的反復載入是CGI性能低下的主要原因,如果CGI解釋器保持在內存中並接受FastCGI進程管理器調度,則可以提供良好的性能、伸縮性、Fail- Over特性等等。

FastCGI特點

FastCGI具有語言無關性.
FastCGI在進程中的應用程序,獨立於核心web伺服器運行,提供了一個比API更安全的環境。APIs把應用程序的代碼與核心的web伺服器鏈接在一起,這意味著在一個錯誤的API的應用程序可能會損壞其他應用程序或核心伺服器。 惡意的API的應用程序代碼甚至可以竊取另一個應用程序或核心伺服器的密鑰。
FastCGI技術目前支持語言有:C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby等。相關模塊在Apache, ISS, Lighttpd等流行的伺服器上也是可用的。
FastCGI的不依賴於任何Web伺服器的內部架構,因此即使伺服器技術的變化, FastCGI依然穩定不變。
FastCGI的工作原理

Web Server啟動時載入FastCGI進程管理器(IIS ISAPI或Apache Mole)
FastCGI進程管理器自身初始化,啟動多個CGI解釋器進程(可見多個php-cgi)並等待來自Web Server的連接。
當客戶端請求到達Web Server時,FastCGI進程管理器選擇並連接到一個CGI解釋器。Web server將CGI環境變數和標准輸入發送到FastCGI子進程php-cgi。
FastCGI子進程完成處理後將標准輸出和錯誤信息從同一連接返回Web Server。當FastCGI子進程關閉連接時,請求便告處理完成。FastCGI子進程接著等待並處理來自FastCGI進程管理器(運行在Web Server中)的下一個連接。 在CGI模式中,php-cgi在此便退出了。
在上述情況中,你可以想像CGI通常有多慢。每一個Web請求PHP都必須重新解析php.ini、重新載入全部擴展並重初始化全部數據結構。使用FastCGI,所有這些都只在進程啟動時發生一次。一個額外的好處是,持續資料庫連接(Persistent database connection)可以工作。

FastCGI的不足

因為是多進程,所以比CGI多線程消耗更多的伺服器內存,PHP-CGI解釋器每進程消耗7至25兆內存,將這個數字乘以50或100就是很大的內存數。

Nginx 0.8.46+PHP 5.2.14(FastCGI)伺服器在3萬並發連接下,開啟的10個Nginx進程消耗150M內存(15M*10=150M),開啟的64個php-cgi進程消耗1280M內存(20M*64=1280M),加上系統自身消耗的內存,總共消耗不到2GB內存。如果伺服器內存較小,完全可以只開啟25個php-cgi進程,這樣php-cgi消耗的總內存數才500M。
上面的數據摘自Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建勝過Apache十倍的Web伺服器(第6版)

PHP-CGI

PHP-CGI是PHP自帶的FastCGI管理器。

PHP-CGI的不足:

php-cgi變更php.ini配置後需重啟php-cgi才能讓新的php-ini生效,不可以平滑重啟。
直接殺死php-cgi進程,php就不能運行了。(PHP-FPM和Spawn-FCGI就沒有這個問題,守護進程會平滑從新生成新的子進程。)
PHP-FPM

PHP-FPM是一個PHP FastCGI管理器,是只用於PHP的,可以在 http://php-fpm.org/download下載得到。

PHP-FPM其實是PHP源代碼的一個補丁,旨在將FastCGI進程管理整合進PHP包中。必須將它patch到你的PHP源代碼中,在編譯安裝PHP後才可以使用。

⑽ php5.3/5.4/5.5 如何配置php-fpm.conf

首先,配置分為兩個部分,第一部分 [global] 為全局配置項,用來定義日誌、pid等相關內容。
第二部分[www], 這個為資源池配置項,其中[]內的字元串為自定義內容,我們也可以寫成域名,
這部分內容用來定義,各個域名所使用的資源分配。
1. listen 用來定義該資源池所監聽的socket,也可以是tcp形式;
2. user、group用來定義php-fpm以哪個賬號和組的身份來運行;
3. pm = dynamic 如何控制子進程,選項有static和dynamic。
如果選擇static,則由pm.max_children指定固定的子進程數。
如果選擇dynamic,則由以下參數決定:
pm.max_children ,子進程最大數
pm.start_servers ,啟動時的進程數
pm.min_spare_servers ,保證空閑進程數最小值,如果空閑進程小於此值,則創建新的子進程
pm.max_spare_servers ,保證空閑進程數最大值,如果空閑進程大於此值,此進行清理
對於專用伺服器,pm可以設置為static。

4. pm.max_children 這個選項來定義,最大開啟的php-fpm子進程數量,根據機器的硬體配置來定義,如果內存高於4G,設置為200或者以上,如果低於4G,比如1G內存,設置50就可以了

5. pm.max_requests 設置每個子進程重生之前服務的請求數. 對於可能存在內存泄漏的第三方模塊來說是非常有用的. 如果設置為 』0′ 則一直接受請求. 設置為500就可以了。

6. rlimit_files = 1024 設置文件打開描述符的rlimit限制. 一般情況下,設置為1024就足夠了。

除了這些配置參數外,另外還有幾個常用的,那就是sloglog和open_basedir

7. slowlog = log/www.discuz.net.slow 這里定義,slow log的路徑,當php腳本執行時間超過 request_slowlog_timeout 值時,會記錄slowlog 它用來幫助我們排查程序哪裡有問題,提高程序的處理速度。

8. request_slowlog_timeout = 1 php腳本執行超時時間

9. php_admin_value[open_basedir]=/data/www/:/tmp/
這個選項是非常關鍵的安全選項,把php的執行賬號只限定在指定的目錄里,這樣可以防止網站被入侵後,黑客獲取其他站點的文件信息和伺服器的某些關鍵信息。

熱點內容
怎麼把安卓手機視頻導入蘋果ipad 發布:2025-01-21 16:10:43 瀏覽:997
c語言實現編譯器 發布:2025-01-21 16:03:19 瀏覽:392
做解壓橡皮 發布:2025-01-21 15:03:06 瀏覽:991
雙系統win訪問mac 發布:2025-01-21 14:53:52 瀏覽:485
安卓車機系統如何安裝carplay 發布:2025-01-21 14:52:24 瀏覽:590
sql操作手冊 發布:2025-01-21 14:46:08 瀏覽:312
青橙腳本 發布:2025-01-21 14:44:05 瀏覽:219
東風本田crv時尚版是什麼配置 發布:2025-01-21 14:20:04 瀏覽:219
安卓如何多開軟體每個機型不一樣 發布:2025-01-21 14:15:29 瀏覽:501
iis配置php5 發布:2025-01-21 14:08:19 瀏覽:274