Nginx錯誤日誌:recv() failed (104: Connection reset by peer) while reading response header from upstream

近期收到其它同事的反饋:有個http接口調用經常出現Connection timed out,去查看tomcat下的業務日誌和catalina.out也沒有重要線索,懷疑reload nginx造成短時的網絡問題,然而說出這種猜想自己都有點心虛。果然沒多久就啪啪啪打臉了,好香!服務調用又出異常啦,而且有時候行,有時候Connection timed out~

沒辦法只能從整個鏈路查日誌,鏈路大概是這樣的:

前端發送的請求 → nginx  → ip哈希方式到Web服務器

既然Web服務器找不到有用的日誌,只能去nginx找,果然在nginx的錯誤日誌裏找到大量如下錯誤日誌:

[error] 26621#0: *50585595 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: xxx.xxx.xx.xxx...

找到錯誤但完全沒有解決思路,難受?,屋漏偏逢連夜雨,接着又收到CPU 200%的預警郵件,有點小興奮。使用top命令查看是哪個進程佔用了這麼高的CPU,是個java進程,使用pwdx pid定位到進程所在路徑。

估計是pid對應的進程已經不能正常工作了,查看佔用CPU最高的兩個線程,發現其一直在做Full GC操作。到這大概知道怎麼回事了,Tomcat進程估計發生了內存泄漏已無法處理請求,快速對該進程的現場信息進行保存,然後重啓Tomcat,重啓後nginx不再產生recv() failed (104: Connection reset by peer)的錯誤日誌。


總結
系統出現時好時壞的異常時首先要留意流入服務器的第一個站點以及CPU內存狀況

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