本文目錄一覽:
- 1、502 Bad Gateway 怎麼解決
- 2、一個php-cgi佔用系統多大內存
- 3、php-cgi.exe 佔用cpu過高,求高手解決。
- 4、php5-cgi和php5-fpm 這兩個東西是什麼意思啊?有什麼區別?怎麼使用
- 5、求php-cgi.exe使用率過高導致CPU100%的解決辦法
- 6、cgi/fastcgi佔用率高
502 Bad Gateway 怎麼解決
502 Bad Gateway是一種報錯提示,這一錯誤並不意味著上游伺服器已關閉(無響應網關/代理),而是上游伺服器和網關/代理不同意的協議交換數據。第一種原因:目前lnmp一鍵安裝包比較多的問題就是502 Bad Gateway,大部分情況下原因是在安裝php前,腳本中某些lib包可能沒有安裝上,造成php沒有編譯安裝成功。解決辦法:可以嘗試根據lnmp一鍵安裝包中的腳本手動安裝一下,看看是什麼錯誤導致的。第二種原因:在php.ini里,eaccelerator配置項一定要放在Zend Optimizer配置之前,否則也可能引起502 Bad Gateway第三種原因:在安裝好使用過程中出現502問題,一般是因為默認php-cgi進程是5個,可能因為phpcgi進程不夠用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 將其中的max_children值適當增加。第四種原因:php執行超時,修改/usr/local/php/etc/php.ini 將max_execution_time 改為300。第五種原因:磁碟空間不足,如mysql日誌佔用大量空間。第六種原因:查看php-cgi進程是否在運行。另外的解決辦法:Nginx 502 Bad Gateway的含義是請求的PHP-CGI已經執行,但是由於某種原因(一般是讀取資源的問題)沒有執行完畢而導致PHP-CGI進程終止,一般來說Nginx 502 Bad Gateway和php-fpm.conf的設置有關。php-fpm.conf有兩個至關重要的參數,一個是max_children,另一個是request_terminate_timeout,但是這個值不是通用的,而是需要自己計算的。在安裝好使用過程中出現502問題,一般是因為默認php-cgi進程是5個,可能因為phpcgi進程不夠用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 將其中的max_children值適當增加。計算的方式如下:如果伺服器性能足夠好,且寬頻資源足夠充足,PHP腳本沒有系循環或BUG的話可以直接將 request_terminate_timeout設置成0s。0s的含義是讓PHP-CGI一直執行下去而沒有時間限制。如果做不到這一點,也就 是說PHP-CGI可能出現某個BUG,或者寬頻不夠充足或者其他的原因導致PHP-CGI假死那麼就建議給 request_terminate_timeout賦一個值,這個值可以根據伺服器的性能進行設定。一般來說性能越好可以設置越高,20分鐘-30分 鍾都可以。而max_children這個值又是怎麼計算出來的呢?這個值原則上是越大越好,php-cgi的進程多了就會處理的很快,排隊的請求就會很少。 設置max_children也需要根據伺服器的性能進行設定,一般來說一台伺服器正常情況下每一個php-cgi所耗費的內存在20M左右。按照官方的答案,排查了相關的可能,並結合了網友的答案,得出了下面的解決辦法:1、查看php fastcgi的進程數(max_children值)代碼:netstat -anpo grep 「php-cgi」 wc -l5(假如顯示5)2、查看當前進程,代碼:top觀察fastcgi進程數,假如使用的進程數等於或高於5個,說明需要增加(根據機器實際狀況而定)3、調整/usr/local/php/etc/php-fpm.conf 的相關設置value name=」max_children」10/valuevalue name=」request_terminate_timeout」60s/valuemax_children最多10個進程,按照每個進程20MB內存,最多200MB。request_terminate_timeout執行的時間為60秒,也就是1分鐘。
一個php-cgi佔用系統多大內存
在網上翻閱資料的時候會看到有人說一個php-cgi進程大約佔用系統內存20M,但是php-cgi佔用內存其實是與你的php.ini配置載入多少個.so(.dll)模塊相關的,我們在linux系統下查看,可以用pman的命令:
pmap $(pgrep php-cgi | head -1)
[root@Smile ~]# pmap $(pgrep php-cgi | head -1)
2830: /home/pubsrv/php/bin/php-cgi –fpm –fpm-config /home/pubsrv/php/etc/php-fpm.conf
0000000000400000 6852K r-x– /home/pubsrv/php/bin/php-cgi
0000000000cb1000 268K rw— /home/pubsrv/php/bin/php-cgi
0000000000cf4000 60K rw— [ anon ]
00000000016fd000 2216K rw— [ anon ]
0000003c24a00000 128K r-x– /lib64/ld-2.12.so (deleted)
0000003c24c1f000 4K r—- /lib64/ld-2.12.so (deleted)
0000003c24c20000 4K rw— /lib64/ld-2.12.so (deleted)
0000003c24c21000 4K rw— [ anon ]
0000003c24e00000 8K r-x– /lib64/libdl-2.12.so (deleted)
0000003c24e02000 2048K —– /lib64/libdl-2.12.so (deleted)
0000003c25002000 4K r—- /lib64/libdl-2.12.so (deleted)
0000003c25003000 4K rw— /lib64/libdl-2.12.so (deleted)
0000003c25200000 1576K r-x– /lib64/libc-2.12.so (deleted)
0000003c2538a000 2044K —– /lib64/libc-2.12.so (deleted)
0000003c25589000 16K r—- /lib64/libc-2.12.so (deleted)
0000003c2558d000 4K rw— /lib64/libc-2.12.so (deleted)
0000003c2558e000 20K rw— [ anon ]
0000003c25600000 92K r-x– /lib64/libpthread-2.12.so (deleted)
0000003c25617000 2048K —– /lib64/libpthread-2.12.so (deleted)
0000003c25817000 4K r—- /lib64/libpthread-2.12.so (deleted)
0000003c25818000 4K rw— /lib64/libpthread-2.12.so (deleted)
0000003c25819000 16K rw— [ anon ]
0000003c25a00000 28K r-x– /lib64/librt-2.12.so (deleted)
0000003c25a07000 2044K —– /lib64/librt-2.12.so (deleted)
0000003c25c06000 4K r—- /lib64/librt-2.12.so (deleted)
0000003c25c07000 4K rw— /lib64/librt-2.12.so (deleted)
0000003c25e00000 524K r-x– /lib64/libm-2.12.so (deleted)
0000003c25e83000 2044K —– /lib64/libm-2.12.so (deleted)
0000003c26082000 4K r—- /lib64/libm-2.12.so (deleted)
0000003c26083000 4K rw— /lib64/libm-2.12.so (deleted)
0000003c26200000 84K r-x– /lib64/libz.so.1.2.3 (deleted)
0000003c26215000 2044K —– /lib64/libz.so.1.2.3 (deleted)
0000003c26414000 4K r—- /lib64/libz.so.1.2.3 (deleted)
0000003c26415000 4K rw— /lib64/libz.so.1.2.3 (deleted)
0000003c26600000 116K r-x– /lib64/libselinux.so.1.#prelink#.YPfIAE (deleted)
0000003c2661d000 2044K —– /lib64/libselinux.so.1.#prelink#.YPfIAE (deleted)
0000003c2681c000 4K r—- /lib64/libselinux.so.1.#prelink#.YPfIAE (deleted)
0000003c2681d000 4K rw— /lib64/libselinux.so.1.#prelink#.YPfIAE (deleted)
0000003c2681e000 4K rw— [ anon ]
0000003c26a00000 928K r-x– /usr/lib64/libstdc++.so.6.0.13 (deleted)
0000003c26ae8000 2048K —– /usr/lib64/libstdc++.so.6.0.13 (deleted)
0000003c26ce8000 28K r—- /usr/lib64/libstdc++.so.6.0.13 (deleted)
0000003c26cef000 8K rw— /usr/lib64/libstdc++.so.6.0.13 (deleted)
0000003c26cf1000 84K rw— [ anon ]
0000003c26e00000 88K r-x– /lib64/libgcc_s-4.4.7-20120601.so.1;529c1fe4 (deleted)
0000003c26e16000 2044K —– /lib64/libgcc_s-4.4.7-20120601.so.1;529c1fe4 (deleted)
0000003c27015000 4K rw— /lib64/libgcc_s-4.4.7-20120601.so.1;529c1fe4 (deleted)
0000003c27200000 88K r-x– /lib64/libresolv-2.12.so (deleted)
0000003c27216000 2048K —– /lib64/libresolv-2.12.so (deleted)
0000003c27416000 4K r—- /lib64/libresolv-2.12.so (deleted)
0000003c27417000 4K rw— /lib64/libresolv-2.12.so (deleted)
0000003c27418000 8K rw— [ anon ]
0000003c27a00000 12K r-x– /lib64/libplds4.so (deleted)
0000003c27a03000 2044K —– /lib64/libplds4.so (deleted)
0000003c27c02000 4K r—- /lib64/libplds4.so (deleted)
0000003c27c03000 4K rw— /lib64/libplds4.so (deleted)
0000003c27e00000 16K r-x– /lib64/libplc4.so (deleted)
0000003c27e04000 2044K —– /lib64/libplc4.so (deleted)
0000003c28003000 4K r—- /lib64/libplc4.so (deleted)
0000003c28004000 4K rw— /lib64/libplc4.so (deleted)
0000003c28200000 228K r-x– /lib64/libnspr4.so (deleted)
0000003c28239000 2048K —– /lib64/libnspr4.so (deleted)
0000003c28439000 4K r—- /lib64/libnspr4.so (deleted)
0000003c2843a000 8K rw— /lib64/libnspr4.so (deleted)
0000003c2843c000 8K rw— [ anon ]
0000003c28600000 148K r-x– /usr/lib64/libnssutil3.so (deleted)
0000003c28625000 2044K —– /usr/lib64/libnssutil3.so (deleted)
0000003c28824000 24K r—- /usr/lib64/libnssutil3.so (deleted)
0000003c2882a000 4K rw— /usr/lib64/libnssutil3.so (deleted)
0000003c28a00000 408K r-x– /lib64/libfreebl3.so (deleted)
0000003c28a66000 2048K —– /lib64/libfreebl3.so (deleted)
0000003c28c66000 4K r—- /lib64/libfreebl3.so (deleted)
0000003c28c67000 4K rw— /lib64/libfreebl3.so (deleted)
0000003c28c68000 16K rw— [ anon ]
0000003c28e00000 28K r-x– /lib64/libcrypt-2.12.so (deleted)
0000003c28e07000 2048K —– /lib64/libcrypt-2.12.so (deleted)
0000003c29007000 4K r—- /lib64/libcrypt-2.12.so (deleted)
0000003c29008000 4K rw— /lib64/libcrypt-2.12.so (deleted)
0000003c29009000 184K rw— [ anon ]
0000003c29200000 1236K r-x– /usr/lib64/libnss3.so (deleted)
0000003c29335000 2044K —– /usr/lib64/libnss3.so (deleted)
0000003c29534000 20K r—- /usr/lib64/libnss3.so (deleted)
0000003c29539000 8K rw— /usr/lib64/libnss3.so (deleted)
0000003c2953b000 8K rw— [ anon ]
0000003c29600000 160K r-x– /usr/lib64/libsmime3.so (deleted)
0000003c29628000 2048K —– /usr/lib64/libsmime3.so (deleted)
0000003c29828000 12K r—- /usr/lib64/libsmime3.so (deleted)
0000003c2982b000 4K rw— /usr/lib64/libsmime3.so (deleted)
0000003c29a00000 204K r-x– /usr/lib64/libssl3.so (deleted)
0000003c29a33000 2048K —– /usr/lib64/libssl3.so (deleted)
0000003c29c33000 8K r—- /usr/lib64/libssl3.so (deleted)
0000003c29c35000 4K rw— /usr/lib64/libssl3.so (deleted)
0000003c29c36000 4K rw— [ anon ]
0000003c29e00000 12K r-x– /lib64/libcom_err.so.2.1 (deleted)
0000003c29e03000 2044K —– /lib64/libcom_err.so.2.1 (deleted)
0000003c2a002000 4K r—- /lib64/libcom_err.so.2.1 (deleted)
0000003c2a003000 4K rw— /lib64/libcom_err.so.2.1 (deleted)
0000003c2a200000 100K r-x– /usr/lib64/libsasl2.so.2.0.23.#prelink#.BXW3hH (deleted)
0000003c2a219000 2044K —– /usr/lib64/libsasl2.so.2.0.23.#prelink#.BXW3hH (deleted)
0000003c2a418000 4K r—- /usr/lib64/libsasl2.so.2.0.23.#prelink#.BXW3hH (deleted)
0000003c2a419000 4K rw— /usr/lib64/libsasl2.so.2.0.23.#prelink#.BXW3hH (deleted)
0000003c2aa00000 1488K r-x– /usr/lib64/libcrypto.so.1.0.0 (deleted)
0000003c2ab74000 2044K —– /usr/lib64/libcrypto.so.1.0.0 (deleted)
0000003c2ad73000 100K r—- /usr/lib64/libcrypto.so.1.0.0 (deleted)
0000003c2ad8c000 40K rw— /usr/lib64/libcrypto.so.1.0.0 (deleted)
0000003c2ad96000 16K rw— [ anon ]
0000003c2ae00000 56K r-x– /lib64/liblber-2.4.so.2.5.6.#prelink#.IEslwN (deleted)
0000003c2ae0e000 2044K —– /lib64/liblber-2.4.so.2.5.6.#prelink#.IEslwN (deleted)
0000003c2b00d000 4K r—- /lib64/liblber-2.4.so.2.5.6.#prelink#.IEslwN (deleted)
0000003c2b00e000 4K rw— /lib64/liblber-2.4.so.2.5.6.#prelink#.IEslwN (deleted)
0000003c2b200000 608K r-x– /usr/lib64/libfreetype.so.6.3.22.#prelink#.GI1Kfx (deleted)
0000003c2b298000 2044K —– /usr/lib64/libfreetype.so.6.3.22.#prelink#.GI1Kfx (deleted)
0000003c2b497000 24K rw— /usr/lib64/libfreetype.so.6.3.22.#prelink#.GI1Kfx (deleted)
0000003c2b600000 260K r-x– /lib64/libgssapi_krb5.so.2.2.#prelink#.gjYRNu (deleted)
0000003c2b641000 2048K —– /lib64/libgssapi_krb5.so.2.2.#prelink#.gjYRNu (deleted)
0000003c2b841000 4K r—- /lib64/libgssapi_krb5.so.2.2.#prelink#.gjYRNu (deleted)
0000003c2b842000 8K rw— /lib64/libgssapi_krb5.so.2.2.#prelink#.gjYRNu (deleted)
0000003c2ba00000 148K r-x– /usr/lib64/libpng12.so.0.49.0.#prelink#.cL7qH2 (deleted)
0000003c2ba25000 2048K —– /usr/lib64/libpng12.so.0.49.0.#prelink#.cL7qH2 (deleted)
0000003c2bc25000 4K rw— /usr/lib64/libpng12.so.0.49.0.#prelink#.cL7qH2 (deleted)
0000003c2be00000 292K r-x– /lib64/libldap-2.4.so.2.5.6.#prelink#.QXZutL (deleted)
0000003c2be49000 2048K —– /lib64/libldap-2.4.so.2.5.6.#prelink#.QXZutL (deleted)
total 286016K
[root@Smile ~]#
可以看到我的一個php-cgi佔用了大約28M
php-cgi.exe 佔用cpu過高,求高手解決。
用Module吧~~~在php目錄中install.txt里有。
使用Apache設置。
LoadModule php4_module “c:/php/php4apache2.dll”
# Don’t forget to copy the php4apache2.dll file from the sapi directory!
AddType application/x-httpd-php .php
# For PHP 5 do something like this:
LoadModule php5_module “c:/php/php5apache2.dll”
AddType application/x-httpd-php .php
# configure the path to php.ini
PHPIniDir “C:/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 Module)
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的,可以在 下載得到。
PHP-FPM其實是PHP源代碼的一個補丁,旨在將FastCGI進程管理整合進PHP包中。必須將它patch到你的PHP源代碼中,在編譯安裝PHP後才可以使用。
求php-cgi.exe使用率過高導致CPU100%的解決辦法
不要使用普通的CGI模式安裝,每個PHP進程默認佔128MB內存,幾G內存也最多百來人訪問就擊垮了。 CGI模式是早期內部小網站的模式,現在一般用於開發時方便調試。
部署PHP應該使用FastCGI方式或者ISAPI方式安裝,就不會產生多進程和資源佔用過多。
cgi/fastcgi佔用率高
在web伺服器配置中優化fastcgi配置文件參數。
php-cgi進程並沒有內存泄漏,php-cgi會在每個請求結束的時候回收腳本使用的全部內存,但是並不會釋放給操作系統,而是繼續持有以應對下一次PHP請求。這樣做大概是為了減少內存碎片化或者解決從系統申請內存之後又釋放回操作系統所需要的時間不可控問題。可是如果偶然一次PHP請求使用了諸如ftp或者zlib這樣的大內存操作,那麼將導致一大塊系統內存被php-cgi持續佔有,不能被利用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/245156.html