**:
一. 戲說
不管你是做運維還是做開發,哪怕你是遊客,時不時會遇到502 bad gateway或504 gateway time-out。出現這頁面,把服務重啟下,再實在不行重啟下伺服器,問題就解決了,但是,這問題還是會困擾著你,特別是做運維的人員。夜黑風高正酣睡時,乙個**響起,讓你重啟服務或iisreset,肯定是極大不爽,立馬要問候他媽了。呵呵,本文總結502與504故障分析與解決方法。
二. 狀態碼解釋
502 bad gateway:作為閘道器或者**工作的伺服器嘗試執行請求時,從上游伺服器接收到無效的響應。
504 gateway time-out:作為閘道器或者**工作的伺服器嘗試執行請求時,未能及時從上游伺服器(uri標識出的伺服器,例如http、ftp、ldap)或者輔助伺服器(例如dns)收到響應。
三. 502 bad gateway原因分析
將請求提交給閘道器如php-fpm執行,但是由於某些原因沒有執行完畢導致php-fpm程序終止執行。說到此,這個問題就很明了了,與閘道器服務如php-fpm的配置有關了。
php-fpm.conf配置檔案中有兩個引數就需要你考慮到,分別是max_children和request_terminate_timeout。
max_children最大子程序數,在高併發請求下,達到php-fpm最大響應數,後續的請求就會出現502錯誤的。可以通過netstat命令來檢視當前連線數。
request_terminate_timeout設定單個請求的超時終止時間。還應該注意到php.ini中的max_execution_time引數。當請求終止時,也會出現502錯誤的。
當積累了大量的php請求,你重啟php-fpm釋放資源,但一兩分鐘不到,502又再次呈現,這是什麼原因導致的呢? 這時還應該考慮到資料庫,檢視下資料庫程序是否有大量的locked程序,資料庫死鎖導致超時,前端終止了繼續請求,但是sql語句還在等待釋放鎖,這時就要重啟資料庫服務了或kill掉死鎖sql程序了。
對於長時間的請求可以考慮使用非同步方式,可以參閱《關於php實現非同步操作的研究》。
四. 504 gateway time-out原因分析
504錯誤一般是與nginx.conf配置有關了。主要與以下幾個引數有關:fastcgi_connect_timeout、fastcgi_send_timeout、fastcgi_read_timeout、fastcgi_buffer_size、fastcgi_buffers、fastcgi_busy_buffers_size、fastcgi_temp_file_write_size、fastcgi_intercept_errors。特別是前三個超時時間。如果fastcgi緩衝區太小會導致fastcgi程序被掛起從而演變為504錯誤。
五. 小結
總而言之,502錯誤主要從四個方向入手:
1. max_children
2. request_terminate_timeout、max_execution_time
3. 資料庫
4. 閘道器服務是否啟動如php-fpm
504錯誤主要檢視nginx.conf關於閘道器如fastcgi的配置。
HTTP頭和狀態碼,iis日誌分析
iis6.0日誌檔案 c windows system32 logfiles w3svc1 舉例 software microsoft internet information services 6.0 version 1.0 date 2007 05 18 05 00 51 fields date...
MS 07004分析和利用
文 圖 gyzy 相信大家對去年的ms06 055還記憶猶新吧,微軟的向量標記語言vml中的method變數ie未對其進行長度進行檢查,導致了乙個棧溢位漏洞。2007年的新年鐘聲剛剛敲響,又乙個關於vml的漏洞 了,cvmlrecolorinfo internalload 中的recolorinfo...
MS 07004分析和利用
相信大家對去年的ms06 055還記憶猶新吧,微軟的向量標記語言vml中的method變數ie未對其進行長度進行檢查,導致了乙個棧溢位漏洞。2007年的新年鐘聲剛剛敲響,又乙個關於vml的漏洞 了,cvmlrecolorinfo internalload 中的recolorinfo 方法中存在整數溢...