Java.net.SocketException:Connection reset

        第一眼看到這個異常就顧名思義意識到是個連接的錯誤,然後就百度一下這個異常是什麼原因引起的,簡單來說呢就是在連接斷開後的讀和寫操作引起的,再簡單一點來說呢就是數據還沒傳送完,連接就斷開了。。。一臉懵逼,無從下手。。。


       那麼就先來看看什麼操作導致出現這個異常的吧,點開一個頁面docId是370,數據返回完全正常,好吧,繼續打開別的,當docId是374的時候問題來了,每次刷新返回的數據有的時候多有的時候少,後臺報這個異常的錯啦。真的想爆粗口,這明顯不是api的錯啊,到底什麼原因引起的???打開Chrome控制檯,api請求就是failed,好吧,net:ERR_INCOMPLETE_CHUNKED_ENCODING,又是一臉懵逼,再去查百度吧,大概意思就是response.open,response.close引起的,汗。。。


      那麼問題來了,到底是不是後臺程序的原因呢,把nginx代理的端口號換成Tomcat之後訪問api,docId爲374,數據能夠全部返回,由此可以斷定,不是java的問題,那麼就只能是nginx代理的問題了。進入到nginx的錯誤日誌裏查看後發現有個Permission denied,權限不夠,哈哈哈,再一看nginx的用戶是nobody,nobody是默認權限,可想而知,好多目錄無法訪問啦,更別說臨時存儲區的操作了,只要把nobody換掉就行啦。一般呢,會建一個www的用戶並,設置一些權限,當然爲了省事,可以將用戶直接換爲root。好啦,大功告成~~~

      總的來說呢,引起後臺報Java.net.SocketException:Connection reset這個異常和前端報net:ERR_INCOMPLETE_CHUNKED_ENCODING這個錯,有異曲同工之妙,就是因爲nginx代理的時候,數據量過大,超過了nginx分配的內存大小,就會存入臨時緩存區,而nobody沒有這個權限,所以返回數據不正常,因此,只要將用戶替換成有權限的角色即可,比如www,比如root。


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