为什么我的TOMCAT会隔了一段时间死掉?

我在solaris上装了一个tomcat 4.1.24, 用jd2连接apache,但是,隔一段时间,tomcat就会死掉,现在只能写一个监控程序隔一段时间检查tomcat是否死掉。。。

查看日志:里面有很多broken pipe的错误,如下:
StandardWrapperValve[default]: Servlet.service() for servlet default threw exception
java.io.IOException: Broken pipe
at java.net.SocketOutputStream.socketWrite(Native Method)
at java.net.SocketOutputStream.write(SocketOutputStream.java:91)
at org.apache.jk.common.ChannelSocket.send(ChannelSocket.java:407)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:599)
at org.apache.jk.server.JkCoyoteHandler.doWrite(JkCoyoteHandler.java:216)
at org.apache.coyote.Response.doWrite(Response.java:524)
at org.apache.coyote.tomcat4.OutputBuffer.realWriteBytes(OutputBuffer.java:384)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:439)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:359)
at org.apache.coyote.tomcat4.OutputBuffer.writeBytes(OutputBuffer.java:411)
at org.apache.coyote.tomcat4.OutputBuffer.write(OutputBuffer.java:398)
at org.apache.coyote.tomcat4.CoyoteOutputStream.write(CoyoteOutputStream.java:110)
at org.apache.catalina.servlets.DefaultServlet.copyRange(DefaultServlet.java:1996)
at org.apache.catalina.servlets.DefaultServlet.copy(DefaultServlet.java:1745)
at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:1073)
at org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java:506)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)

请教大家有没有类似的经验和解决办法,谢谢!

我也遇到了这个问题。不知谁能回答一下。先顶一下。

tomcat不稳定.用Jetty吧

我用tomcat 用了半年.隔两天就死掉. 用jetty还没出现过问题.

就是,建议用jetty。
或者干脆换成jboss算了。^_^

我们的服务器(Apache+Tomcat)在大流量时也会经常出现死机的现象,一直以为是程序的问题,花了很长时间排查还是老样子,难道真是Tomcat不稳定?

现在这个论坛就是Apache+Tomcat ,可以从页面下方访问量统计数获得论坛访问量,这种访问量对于一般商业系统已经是足够大,但是论坛一直比较稳定。

我认为更多原因还是应用系统,使用内存泄漏工具查查。

问题出在mod_jk2上。

因为apache与tomcat是通过mod_jk2通讯的。

当用户先与apache建立连接。如果是java相关的程序,apache会把控制权通过mod_jk2交给tomcat。

但是tomcat不知道该用户已经失去连接了。。所以tomcat就不知道什么时候把用户的连接释放掉。。这样就会导致越来越多的死连接。。当死连接数到达tomcat最大允许连接数的时候,新的连接就不能建立。。用户连接网站的时候,就会出现一直等待的状态。

用netstat会看到很多close_wait状态。

我想可能是mod_jk2本身有问题,或者是哪儿有什么配置我没有想到。

不知道bang的tomcat是与apache结合的吗?如果单单是tomcat,我想应该没问题的,不过我还是不喜欢tomcat的配置文件,太长。。

我最后还是选择用resin.