首頁 >後端開發 >PHP問題 >linux下php-cgi停止怎麼辦

linux下php-cgi停止怎麼辦

王林
王林原創
2021-09-26 16:32:572392瀏覽

linux下php-cgi停止的解決方法是:更改nginx的配置項,減少FastCGI的請求次數,盡量維持buffers不變即可,例如【fastcgi_buffer_size 128k;】。

linux下php-cgi停止怎麼辦

本文操作環境:linux 5.9.8、php 7、thinkpad t480電腦。

前言:

偶然發現一台生產中的伺服器(centos 5.2 64位元 4G記憶體)總是出現網站打不開的問題。後來就去伺服器上看了一下,結果發現nginx和php-cgi都在運作狀態,但此時php-cgi的cpu佔用為0。於是我馬上查看了檔案句柄數限制:

ulimit -n

得到的結果是:1024,這個值對生產中的服務顯得偏小。

網路上給出的解決方案,大部分是直接輸入

ulimit -SHn 51200 # 51200可自己根据应用调整

此法缺點很明顯,一旦退出登陸,設定就失效了。

也有說直接把該指令寫到/etc/rc.d/rc.local中的,今天找到一個正確的做法

開/etc/security/limits.conf,裡面有很詳細的註釋,找到如下設定(如果沒有就插入)

代碼如下

* soft nofile 51200
* hard nofile 51200

退出後再次登陸,查看句柄數,已經正確設定為51200。

如果有碰到類似情況,可以檢查一下看看是不是檔案句柄數設定太小所造成的。

訪問時出現502 Bad Gateway 的解決辦法

Nginx 502 Bad Gateway的含義是請求的php-cgi已經執行,但是由於某種原因(一般是讀取資源的問題)沒有執行完成而導致php-cgi進程終止。一般並發數太高的網站都容易出現此錯誤。出現502 Bad Gateway的原因有很多,但是大部分人修改下面的參數即可解決。

更改nginx的幾個設定項,減少FastCGI的請求次數,盡量維持buffers不變:

程式碼如下

fastcgi_buffer_size 128k;
fastcgi_buffers 2 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;

開啟/usr/local/php/etc /php-fpm.conf 文件,修改以下幾個參數:

程式碼如下

25
requests">2048
65535
30s
60s

request_terminate_timeout指的是fast-cgi的執行腳本時間,它預設為0s。 0s的意思是讓php-cgi一直執行下去而沒有時間限制。如果你在此設成0s,那麼當出現502 Bad Gateway的時候,這個502的狀態將持續下去不會改變。但是如果你設定成5s,那麼當php-cgi假死5s以後會自動恢復。這個值可以根據你伺服器的效能進行設定,這裡我設定的是60s。

max_children表示php-cgi的處理進程。如果max_children設定的較小,例如5-10個,那麼php-cgi就會“很累”,處理速度也很慢,等待的時間也較長。如果長時間沒有處理的請求就會出現504 Gateway Time-out錯誤。設定max_children也需要依照伺服器的效能設定,增加進程數,記憶體佔用也會相應增大,正常情況下每個php-cgi所耗費的內存在20M左右,這裡我設定的是25。

php-fpm的預設靜態處理方式會使得php-cgi的進程長期佔用記憶體而無法釋放,這也是導致nginx出錯的原因之一,因此可以將php-fpm的處理方式改成apache -like模式。

修改完成執行lu-restart 即可(LuManager伺服器管理系統)。

推薦學習:php培訓

以上是linux下php-cgi停止怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn