一种产生socket write error的原因(sitemesh 相关) -凯发k8网页登录

开发出高质量的系统

常用链接

统计

积分与排名

好友之家

最新评论

一种产生socket write error的原因(sitemesh 相关)

最近拿到一个工程,不停的报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.http11baseprotocol$http11connectionhandler.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.threadpool$controlrunnable.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问题的..但很多都没有提问者出来确认问题解决.
这说明产生这个问题的原因很多.现说说我看到的,认为的可能的原因:
解释一:

这个跟数据库没有关系,当客户端发出请求(request)后,如果还没有完全获得服务端的响应(response),客户端与服务器段的连接断开(例如断网、按了“停止”按钮、或者客户端浏览器关闭等),服务器端就会抛出此exception
解释二:

这个问题一般是客户端在连接还没有完全建立的时候就取消连接,比如用户按了浏览器上面的“停止”按钮,一般来说没有什么问题。但是如果频繁出现,就表示很多客户端连接到apache服务器的响应时间太长了,可能是网络的问题或者服务器性能问题   可能你的网络连接存在一些问题,你的数据传输的时候,可能由于时间等待的太久,但是server段设置的连接检验时间限制一定,那么就可能出现这种情况的!
解释三:

经常出现的 peer: 原因可能是多方面的,不过更常见的原因是:①:服务器的并发连接数超过了其承载量,服务器会将其中一些连接down掉;②:客户关掉了浏览器,而服务器还在给客户端发送数据;③:浏览器端按了stop
上边这些解释意思大概差不多,不过侧重点不同,详细程度不同,有的从现象,有的从原因,有的从原理.
感觉这些解答是对的,但是造成这个现象的原因依然是多样的.什么才是造成我这个工程的原因呢 ?我并没有出现上述的情况,但依然大量存在这种exception几乎每次都出现.
下边介绍一下我拿到的工程,这个工程是基于appfuse变化来的,很多东西类似.因为对这个exception没有概念
当时第一反映是排除法,一个个去掉工程中的各个框架,找到原因为止.测试的结果是和sitemesh有关,但记忆中我也用过sitemesh()没出过这样的错误.建立一个sitemesh的工程,测试没问题,把对应的配置文件也弄过来全部都一样,问题出现了.仔细分析一下,发现直观原因是sitemesh的decorators目录下的装饰文件中的出现的情况就会出这个exception,删掉不相关的东西.再测试,问题又没了.再次分析.发现
和一个配置的error页面同时存在的时候才会有这个问题.去掉任何一个都不出现.为什么呢 ?
仔细看一下这个error页面404.jsp,发现一个问题,404.jsp也使用了sitemesh.分析一下,发现一个问题.如果
引发404错误,跳转到4.4.jsp页面,404页面被filter拦截,再次引入decorators中的页面,也就再次解析再次造成404错误.这时个死循环.这下明白了.只要确认会产生404错误就可以了.确认了一下是这个问题.
原因找到了,分析一下:
在使用sitemesh同时配置一个异常页面的时候太容易产生这个问题了.同时异常页面没有被sitemesh exclude
只要decorators中的页面出现问题,就很容易会出现这个exception
常出现的原因就是引入不存在的文件,js ,image,css等
原因上边分析了,死循环.
总结:
如果你使用sitemesh,如果你出现这个异常.第一个应该看的时decorator中的文件是否会产生异常.
另外是webwork2.2之后才加入的,使用下来发现了很多问题.这里不一一列举了.建议尽量少用,

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

posted on 2007-05-18 14:04 dreamstone 阅读(31348) 评论(7)     所属分类: web框架

# re: 一种产生socket write error的原因(sitemesh 相关) 2007-08-18 09:11

佩服,我也遇到同样的问题,一直没有解决,我用了struts2和sitemesh,看来是和你一样的,马上试试!  回复     

# re: 一种产生socket write error的原因(sitemesh 相关) 2007-11-05 11:16

我用的是struts2 的下载 文件 就 下载时候 取消 下载 就出现 这个问题
不知道 可以给个 具体的解决 方法吗!~~~
谢谢  回复     

# re: 一种产生socket write error的原因(sitemesh 相关)[未登录] 2008-06-02 11:48

楼主,我也用的是appfuse1.94,出现这个问题了。不知楼主最终是如何解决的。  回复     

# re: 一种产生socket write error的原因(sitemesh 相关) 2008-11-20 18:17

解决办法 修改web.xml

404
/error.jsp


error.jsp 使用 response.sendredirect("/index.html");
主要问题是ie7没有正常解析应用服务器给的跳转信息,需要我们自己写代码显示地由服务器重定向到新的页面 (jsp)
样本代码如下:
<%@ page language="java" contenttype="text/html; charset=gbk" pageencoding="gbk"%>
<%@ page import="org.apache.commons.logging.*" %>


<%
log log = logfactory.getlog("error.jsp");
log.error("error.jsp 调用 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!-----------------------------");
response.sendredirect("/index.html");
%>

  回复     

# re: 一种产生socket write error的原因(sitemesh 相关) 2008-11-21 10:59

何明 的方法,我刚试过 哈哈  回复     

# re: 一种产生socket write error的原因(sitemesh 相关) 2009-04-26 12:54

何明的方法可以一试  回复     

# re: 一种产生socket write error的原因(sitemesh 相关) 2011-12-31 14:36


11-12-31 14:19:25 debug [localhost]:343 - processing errorpage[errorcode=404, location=/common/404.jsp]
11-12-31 14:19:25 debug [localhost]:343 - processing errorpage[errorcode=404, location=/common/404.jsp]
控制台出现这样的提示,但是不影响程序的运行;公司的框架,不知何解、  回复     


只有注册用户后才能发表评论。


网站导航:
              
 
网站地图