Nginx 499 報錯,tomcat大量超時

今天web大量超時報錯,查看日誌顯示,tomcat鏈接RPC服務timeout,查看tomcat機器和RPC服務所在機器資源都正常。嘗試重啓RPC服務後,web仍然報錯,查看nginx日誌,有大量499報錯。經查詢得知,nginx的499報錯解釋如下:

499 / ClientClosed Request
    An Nginx HTTP server extension. This codeis introduced to log the case when the connection is closed by client whileHTTP server is processing its request, making server unable to send the HTTP header back

原因可能是服務端處理時間太長了,看一下upstream_response_time時間可以瞭解到後端程序處理了多久。

先了解一下什麼是upstream_response_time和request_time分別是什麼:

request_time:服務端從接受客戶端請求的第一個字節到服務端應用程序處理完髮送完響應數據的時間,包括請求數據時間、程序響應時間、輸出響應時間
upstream_response_time:指nginx向後端如php,tomcat等建立連接開始到到處理完數據關閉連接爲止的時間。

查看nginx日誌,果然upstream_response_time和request_time都很大,猜測是後臺處理太慢,導致客戶端主動斷開了鏈接。

最後查看db服務器,發現cpu使用率和內存使用率都很高,進而查看『show processlist』,發現mysql處理一條更新花費了很多時間,因爲前兩天升級了web的內存和cpu,增大了kvm的內存。應該是tomcat集羣處理速度提高,導致db壓力負載過大,sql處理的太慢,客戶端等待時間太長,用戶主動斷開連接。

解決:

升級db服務器的cpu,從8核升級到16核,果然,web不在超時,nginx不再報499錯誤。


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