Nginx+PHP(php-fpm)遇到的502BadGateway錯誤
我一個統計程式估計要跑1分多鐘以上
檢視了一個php-fpm 配置檔案
[13-Oct-2013 12:06:07] WARNING: [pool www] child 7458, script `/home/wwwroot/admin/index.php` (request: "GET /index.php") execution timed out (101.515909 sec), terminating [13-Oct-2013 12:06:07] WARNING: [pool www] child 7458 exited on signal 15 (SIGTERM) after 1130895.840878 seconds from start [13-Oct-2013 12:06:07] NOTICE: [pool www] child 24885 started
很明顯了
部分PHP程式的執行時間超過了Nginx的等待時間,可以適當增加nginx.conf配置檔案中FastCGI的timeout時間
google了一較以後
http://rtcamp.com/wordpress-nginx/tutorials/php/increase-script-execution-time/
Changes in php.ini
If you want to change max execution time limit for php scripts from 30 seconds (default) to 300 seconds.
vim /etc/php5/fpm/php.ini
Set…
max_execution_time = 300
In Apache, applications running PHP as a module above would have suffice. But in our case we need to make this change at 2 more places.
Changes in PHP-FPM
This is only needed if you have already un-commented request_terminate_timeout parameter before. It is commented by default, and takes value of max_execution_time found in php.ini
Edit…
vim /etc/php5/fpm/pool.d/www.conf
Set…
request_terminate_timeout = 300
Changes in Nginx Config
To increase the time limit for example.com by
vim /etc/nginx/sites-available/example.com
location ~ .php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_read_timeout 300;
}
If you want to increase time-limit for all-sites on your server, you can edit main nginx.conf file:
vim /etc/nginx/nginx.conf
Add following in http{..} section
http {
#...
fastcgi_read_timeout 300;
#...
}
Reload PHP-FPM & Nginx
Don’t forget to do this so that changes you have made will come into effect:
service php5-fpm reload
service nginx reload
原來,php-fpm有一個引數 max_requests,該引數指明瞭,每個children最多處理多少個請求後便會被關閉,預設的設定是500。因為php是把請求輪詢給每個 children,在大流量下,每個childre到達max_requests所用的時間都差不多,這樣就造成所有的children基本上在同一時間 被關閉。
在這期間,nginx無法將php檔案轉交給php-fpm處理,所以cpu會降至很低(不用處理php,更不用執行sql),而負載會升至很高(關閉和開啟children、nginx等待php-fpm),網路卡流量也降至很低(nginx無法生成資料傳輸給客戶端)
解決問題很簡單,增加children的數量,並且將 max_requests 設定未 0 或者一個比較大的值:
開啟 /usr/local/php/etc/php-fpm.conf
然後重啟php-fpm。
二、增加緩衝區容量大小
將nginx的error log開啟,發現“pstream sent too big header while reading response header from upstream”這樣的錯誤提示。查閱了一下資料,大意是nginx緩衝區有一個bug造成的,我們網站的頁面消耗佔用緩衝區可能過大。參考老外寫的修 改辦法增加了緩衝區容量大小設定,502問題徹底解決。後來系統管理員又對引數做了調整隻保留了2個設定引數:client head buffer,fastcgi buffer size。
三、request_terminate_timeout
如果主要是在一些post或者資料庫操作的時候出現502這種情況,而不是在靜態頁面操作中常見,那麼可以檢視一下php-fpm.conf設定中的一項:
request_terminate_timeout
這個值是max_execution_time,就是fast-cgi的執行指令碼時間。
0s
0s為關閉,就是無限執行下去。(當時裝的時候沒仔細看就改了一個數字)
發現,問題解決了,執行很長時間也不會出錯了。
優化fastcgi中,還可以改改這個值5s 看看效果。
php-cgi程式數不夠用、php執行時間長、或者是php-cgi程式死掉,都會出現502錯誤。
==============================================
我把以上的值300改成1000秒去了
相關文章
- 開發中遇到的錯誤
- github上傳遇到的錯誤Github
- 遇到 ORACLE 錯誤 6550Oracle
- 安裝.NET Core遇到的錯誤
- JPA 開發中遇到的錯誤
- 使用React Hooks時遇到的錯誤提示ReactHook
- 使用flashback database 特性時遇到的錯誤Database
- Eclipse中使用Mybatis Generator遇到的錯誤EclipseMyBatis
- mongodb和python互動遇到的錯誤MongoDBPython
- 專案整合Swagger遇到的錯誤Swagger
- 在使用Kafka過程中遇到的錯誤Kafka
- iOS路上遇到的錯誤及解決辦法iOS
- lv擴充套件過程中遇到的錯誤套件
- Python中遇到奇怪的錯誤ValueError:badmarshaldataPythonErrorLDA
- 在windows 打補丁遇到CODE=41的錯誤Windows
- SVN 遇到的一些錯誤解決方案
- php-fpm報錯PHP
- Maven建立專案遇到導包錯誤:Maven
- aix 6.1 安裝gcc,遇到“BUILTIN”錯誤AIGCUI
- IMP-00058: 遇到 ORACLE 錯誤 1691Oracle
- 升級到PHP5.4.3遇到的一個錯誤PHP
- 如何解決 VLC 影片嵌入字幕中遇到的錯誤
- windows上使用telnet時遇到的兩個錯誤Windows
- git 遇到的錯誤以及解決方式(持續更新...)Git
- 裝MYSQL 5.1.40遇到的libmysqlclient.so.16 錯誤MySqlIBMclient
- IMP-00058: 遇到 ORACLE 錯誤 1461 和 ORA-01461錯誤Oracle
- android Studio遇到transformClassesWithDexForDebug錯誤AndroidORM
- kill session遇到ORA-00031錯誤Session
- vue2匯入專案遇到錯誤Vue
- Oracle 不完全恢復遇到的ORA-600錯誤Oracle
- JavaScript 中遇到的錯誤問題,該怎麼處理?JavaScript
- 訪問 SAP 電商雲 Storefront 時遇到的 HTTP 403 錯誤HTTP
- 如何處理CloudFoundry應用部署時遇到的254錯誤Cloud
- Spring Boot配置是遇到錯誤:jdbcUrl is required with driverClassNameSpring BootJDBCUI
- ORACLE匯入遇到ORACLE錯誤959解決方法Oracle
- Tomcat遇到OracleTimeoutPollingThread錯誤TomcatOraclethread
- 執行SQL語句遇到3113錯誤SQL
- Windows XP中建立庫遇到ORA-28056錯誤Windows