最近拿到一个工程,不停的报socket write error,虽然不影响正常使用,但是真的很烦,而且会影响日志的记录.所以决定找到这个问题的答案:
excepion的堆栈信息如下:

Exception Processing ErrorPage[errorCode=404, location=/404.jsp]
ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:327)
at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:293)
at org.apache.catalina.connector.Response.flushBuffer(Response.java:544)
at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:286)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocolHttp11ConnectionHandler.processConnection(Http11BaseProtocol.java:667)atorg.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)atorg.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)atorg.apache.tomcat.util.threads.ThreadPoolHttp11ConnectionHandler.processConnection(Http11BaseProtocol.java:667) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPoolHttp11ConnectionHandler.processConnection(Http11BaseProtocol.java:667)atorg.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)atorg.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)atorg.apache.tomcat.util.threads.ThreadPoolControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:746)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:433)
at org.apache.coyote.http11.InternalOutputBuffer.flush(InternalOutputBuffer.java:304)
at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:991)
at org.apache.coyote.Response.action(Response.java:182)
at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:322)
13 more

第一反映是google一下.发现真是个大众性的问题,无数人在问,很多人在解答,答案不一
有说weblogic问题的,有说apache+tomcat问题的…但很多都没有提问者出来确认问题解决.
这说明产生这个问题的原因很多.现说说我看到的,认为的可能的原因:
解释一:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&threadID=21359&messageID=136779
这个跟数据库没有关系,当客户端发出请求(request)后,如果还没有完全获得服务端的响应(response),客户端与服务器段的连接断开(例如断网、按了“停止”按钮、或者客户端浏览器关闭等),服务器端就会抛出此Exception
解释二:
http://blogger.org.cn/blog/more.asp?name=lisawater&id=8841
这个问题一般是客户端在连接还没有完全建立的时候就取消连接,比如用户按了浏览器上面的“停止”按钮,一般来说没有什么问题。但是如果频繁出现,就表示很多客户端连接到Apache服务器的响应时间太长了,可能是网络的问题或者服务器性能问题 可能你的网络连接存在一些问题,你的数据传输的时候,可能由于时间等待的太久,但是server段设置的连接检验时间限制一定,那么就可能出现这种情况的!
解释三:
http://www.kehui.net/html/article/33/33915.html
经常出现的Connection reset by peer: 原因可能是多方面的,不过更常见的原因是:①:服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉;②:客户关掉了浏览器,而服务器还在给客户端发送数据;③:浏览器端按了Stop
上边这些解释意思大概差不多,不过侧重点不同,详细程度不同,有的从现象,有的从原因,有的从原理.
感觉这些解答是对的,但是造成这个现象的原因依然是多样的.什么才是造成我这个工程的原因呢 ?我并没有出现上述的情况,但依然大量存在这种exception几乎每次都出现.
下边介绍一下我拿到的工程,这个工程是基于appfuse变化来的,很多东西类似.因为对这个exception没有概念
当时第一反映是排除法,一个个去掉工程中的各个框架,找到原因为止.测试的结果是和sitemesh有关,但记忆中我也用过sitemesh(如果你对sitemesh不了解看这里)没出过这样的错误.建立一个sitemesh的工程,测试没问题,把对应的配置文件也弄过来全部都一样,问题出现了.仔细分析一下,发现直观原因是sitemesh的decorators目录下的装饰文件中的出现ww:head/的情况就会出这个exception,删掉不相关的东西.再测试,问题又没了.再次分析.发现
ww:head和一个配置的error页面同时存在的时候才会有这个问题.去掉任何一个都不出现.为什么呢 ?
仔细看一下这个error页面404.jsp,发现一个问题,404.jsp也使用了sitemesh.分析一下,发现一个问题.如果ww:head/
引发404错误,跳转到4.4.jsp页面,404页面被filter拦截,再次引入decorators中的页面,也就再次解析ww:head/再次造成404错误.这时个死循环.这下明白了.只要确认ww:head/会产生404错误就可以了.确认了一下是这个问题.
原因找到了,分析一下:
在使用sitemesh同时配置一个异常页面的时候太容易产生这个问题了.同时异常页面没有被sitemesh exclude
只要decorators中的页面出现问题,就很容易会出现这个exception
常出现的原因就是引入不存在的文件,js ,image,css等
原因上边分析了,死循环.
总结:
如果你使用sitemesh,如果你出现这个异常.第一个应该看的时decorator中的文件是否会产生异常.
另外ww:head/是webwork2.2之后才加入的,使用下来发现了很多问题.这里不一一列举了.建议尽量少用,

如果你想看一下效果:
这里http://www.blogjava.net/Files/dreamstone/sitemesh.rar下载工程,导入eclipse,添加需要的jar文件,然后直接访问404.jsp就出现了

产生socket write error的原因相关推荐

  1. 分析connection reset by peer, socket write error错误原因

    上次写<connection reset by peer, socket write error问题排查>已经过去大半年,当时把问题"敷衍"过去了. 但是此后每隔一段时 ...

  2. 重新分析connection reset by peer, socket write error错误原因

    上次写<connection reset by peer, socket write error问题排查>已经过去大半年,当时把问题"敷衍"过去了. 但是此后每隔一段时 ...

  3. Tomcat:Connection reset by peer: socket write error

    Connection reset by peer: socket write error错误分析及解决 Connection reset by peer: socket write error错误分析 ...

  4. 解决foxmail提示“can not open socket WinSock Error:10106”

    试用foxmail提示"can not open socket WinSock Error:10106",安装一下方法试没有见效,后来发现我没有安装协议,因为我看有TCP/IP协议 ...

  5. java.net.SocketException: Software caused connection abort: socket write error

    我使用的框架是Struts2+Hibernate3+Spring,项目的后台数据库是Mysql,最近挪到正式服务器上了,处于一直打开服务的状态,就出现了java.net.SocketException ...

  6. 异常:Software caused connection abort: socket write error

    异常:Software caused connection abort: socket write error 参考文章: (1)异常:Software caused connection abort ...

  7. Whitelabel Error Page原因及解决方案

    Whitelabel Error Page原因及解决方案 解决方案一: 目录结构问题: 官网说明:http://docs.spring.io/spring-boot/docs/current-SNAP ...

  8. java.net.SocketException: Connection reset by peer: socket write error

    最近在做自己的毕业设计,名字是"基于Android的校园二手商品交易系统",于是想把电脑作为服务器,以Android手机作为客户端,做一个C/S结构的程序. 可是一开始就遇到了一个 ...

  9. 几个常见的 Socket 连接错误及原因

    原文地址:http://lzy.iteye.com/blog/383884 下面列出了几个在客户与服务进程连接中常见的几个 Socket 错误,并分析了原因.后续再逐渐补充吧. ECONNABORTE ...

最新文章

  1. linux 查看某一个进程的socket连接数
  2. msm8916 dt选用规则
  3. JS 加强篇!推荐 10 个好用的 TypeScript 的开源项目 YYDS !
  4. GPS Essentials
  5. ubuntu之sudo apt-get update提示Could not connect to 127.0.0.1:8081 (127.0.0.1)解决办法
  6. java jsp校验提示信息_java Jquery表单校验代码jsp页面
  7. [20170508]listagg拼接显示字段.txt
  8. python_类方法和静态方法
  9. Shortest Prefixes
  10. 佳能打印机清零操作及清零软件
  11. 通过JAVA获取优酷、土豆、酷6、6间房、56视频
  12. 开始刷题--《C语言经典100题》
  13. 度中心性(degree)、接近中心性(closeness)和中介中心性(betweenness)的理解
  14. html发起微信或支付宝支付,vue实现-微信网页中唤起支付宝支付
  15. android最新直播框架,NDK--Android Studio中直播推流框架的搭建
  16. Clover 驱动文件夹_黑苹果(clover文件夹中各个文件的主要功能)
  17. 大数据中台架构以及建设全流程二(Daas层设计)
  18. 5G数据安全防护白皮书
  19. FM1702sl终于调通小结
  20. android录音实现

热门文章

  1. 科目二 倒车入库 流程记录 LTS
  2. 【前端学习】前端学习第十九天:浏览器对象模型(BOM)中的对象
  3. Android发送彩信(带图片附件)
  4. history路由下,Whitelabel Error Page错误
  5. 计算机毕业设计Java传统文化知识竞赛系统(源码+系统+mysql数据库+lw文档
  6. 6-1 jmu-python-组合数据类型-1.计算坐标点欧氏距离 (10 分)
  7. wqewqewqewq
  8. NYOJ 427 Number Sequence
  9. java课程结课论文,语言课程论文范文
  10. Arduino控制RGB灯(WS2812B)