關於執行PHP腳本時 Nginx 提示502 PHP運行日誌顯示 exited on signal 9(SIGKILL) 的問題

解決辦法

測試服務器配置: 2核 4G

1、先看PHP的php.ini設置

max_execution_time = 120
memory_limit = 128M

max_execution_time 腳本最大執行時間,這裏最好配置60+,比如curl的超時就是60,配置大一點比較好。
這樣子就算curl 60s超時了,你還可以通過set_time_limit(0); 來重置計時器。

memory_limit 的設置跟你的項目有關,例如wp就建議128M,我們這裏就設爲128M。
怎麼看設置多少爲合適?訪問執行消耗大的腳本,服務器執行top命令,觀察%MEM的消耗。

2、再看PHP-FPM的配置

pm = static
pm.max_children = 20
pm.max_requests = 1000
request_terminate_timeout = 300s

pm模式建議爲static,我個人經驗。 擴展閱讀:https://www.jianshu.com/p/c9a028c834ff

pm.max_children = 20 這個20是怎麼來的呢,嗯,服務器4G內存,實際空閒的大概3500M吧,3500/(128x1.2)=22.79,取小,於是就20咯。理論上說,併發還是取決於CPU的核數,如果是計算型的就設置爲CPU的核數,非計算型的,用 空閒內存 / (腳本最大內存*1.2) 咯,取小。擴展閱讀:http://xiaohost.com/2614.html

pm.max_requests 就是單個子進程最大的處理量(處理完子進程會重啓),主要看業務需求,內存消耗大的,設置小一點就會早點釋放內存;如果沒什麼內存消耗的,設置大一點咯。

request_terminate_timeout 這個是php.ini裏面的max_execution_time 腳本最大超時有問題的時候,就會看這個參數,時間達到了就會幹掉子進程。

嗯,所以總的來說,NGINX 提示502,而PHP提示exited on signal 9(SIGKILL) ,是由於PHP配置出的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章