Java.net.SocketException:Connection reset

        第一眼看到这个异常就顾名思义意识到是个连接的错误,然后就百度一下这个异常是什么原因引起的,简单来说呢就是在连接断开后的读和写操作引起的,再简单一点来说呢就是数据还没传送完,连接就断开了。。。一脸懵逼,无从下手。。。


       那么就先来看看什么操作导致出现这个异常的吧,点开一个页面docId是370,数据返回完全正常,好吧,继续打开别的,当docId是374的时候问题来了,每次刷新返回的数据有的时候多有的时候少,后台报这个异常的错啦。真的想爆粗口,这明显不是api的错啊,到底什么原因引起的???打开Chrome控制台,api请求就是failed,好吧,net:ERR_INCOMPLETE_CHUNKED_ENCODING,又是一脸懵逼,再去查百度吧,大概意思就是response.open,response.close引起的,汗。。。

Java.net.SocketException:Connection reset_第1张图片

      那么问题来了,到底是不是后台程序的原因呢,把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。


你可能感兴趣的:(项目经验)