错误情况:tomcat在启动完后,因为有用户访问,立刻就会出现CharsetFilterClientAbortException:  java.net.SocketException: Connection reset b
y peer: socket write error
2006-04-04 10:05:25,531 DEBUG [org.apache.catalina.session.ManagerBase] - <End e
xpire sessions StandardManager processingTime 8313 expired sessions: 0>
CharsetFilterClientAbortException:  java.net.SocketException: Connection reset b
y peer: socket write error
CharsetFilterClientAbortException:  java.net.SocketException: Connection reset b
y peer: socket write error这样的错误。但这样的错误不会导致程序不能使用。数据库和程序都可以使用。但速度是很慢的。只是时间长了(一般为1天左右)tomcat就会当掉。访问量约为1000左右。在tomcat当掉的时候,cpu 线程数,句柄数一切正常。Jvm大小为1024M,物理内存为6G。
还有一部份这样的错误:2006-04-02 16:12:33,317 ERROR [org.hibernate.util.JDBCExceptionReporter] - <Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.io.EOFExceptionSTACKTRACE:java.io.EOFException
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1902)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2348)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2858)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1570)
at com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1085)
at com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:670)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1024)
at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:92)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:120)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1272)
at org.hibernate.loader.Loader.doQuery(Loader.java:391)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
at org.hibernate.loader.Loader.doList(Loader.java:1593)
at org.hibernate.loader.Loader.list(Loader.java:1577)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:395)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:271)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:844)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
at com.dipian.dao.hibernate.UserToGroupDAOImpl$1.doInHibernate(UserToGroupDAOImpl.java:63)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:365)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:333)
at com.dipian.dao.hibernate.UserToGroupDAOImpl.findGroup(UserToGroupDAOImpl.java:58)
at com.dipian.dao.hibernate.UserDAOImpl.findGroup(UserDAOImpl.java:281)
at com.dipian.dao.hibernate.UserDAOImpl$$FastClassByCGLIB$$6f0f69f9.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:698)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:148)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:643)
at com.dipian.dao.hibernate.UserDAOImpl$$EnhancerByCGLIB$$f8bf0c5c_2.findGroup(<generated>)
at com.dipian.control.portal.ShowMeController.handleRequest(ShowMeController.java:55)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:717)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:658)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:392)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:357)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.dipian.util.CharsetFilter.doFilter(CharsetFilter.java:30)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
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)
** END NESTED EXCEPTION **Last packet sent to the server was 63 ms ago.>1、 我们程序本身没有任何socket的代码。
2、 所用技术为spring mvc + spring + hibernate 
3、 Tomcat5.5.12   mysql 5.0.18    jdk1.5.06
个人意见:实在是找不到原因为什么出现现在这样的问题。不能够定位到具体的错误点。因为tomcat起来就出现这样的错误。重启windows2003后还是一样出现这样的错误 请遇见过的朋友帮忙看一下。有不明白的可以随时跟贴或联系我。
Qq  283765999
msn  [email protected]

解决方案 »

  1.   

    public class EOFException extends IOException当输入过程中意外到达文件或流的末尾时,抛出此异常。 此异常主要被数据输入流用来表明到达流的末尾。注意,其他许多输入操作返回一个特殊值表示到达流的末尾,而不是抛出异常。
    参考一下.............
      

  2.   

    jobs002(赏花赏月赏春光,The More you know,The More you forg)我的程序没有读文件的地方,是否有其它的原因导致问题。
      

  3.   

    不好意思,我是个新手,不过那个错误描述是从JAVA API找的...............
      

  4.   


    1、 我们程序本身没有任何socket的代码。
       MYSQL, 客户连接Web访问都是Socket, 只是不是你写的而已
     
    3、 Tomcat5.5.12   mysql 5.0.18    jdk1.5.06
       at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1902)
       可能问题出现在MySQL, 打开mysqlio.java, 看1902行发生什么事情Jvm大小为1024M,物理内存为6G. 应用占用的内存是否有些太多呀.
      

  5.   

    http://forums.mysql.com/read.php?39,76786,76786
      

  6.   

    应该不会与mysql的字符集有关吧,关注中
      

  7.   

    与mysql的字符集是没有关系的吧。TinyJimmy(Jimmy) 希望给出一些意见
      

  8.   

    java.net.SocketException: Connection reset by peer: socket write error会不会是你的网络有什么问题呀!!你看看你的网卡是否工作正常.你可以通过另外一台要器ping -t看网络是否正常.还有就是你的DBServer 上的网络是否正常.再个就是copy大块的文件,看是否成功来检查网格及目标磁盘是个有问题
      

  9.   

    网络应该不会有问题的,
    ping是可以ping通的。
    dbserver和tomcat在一台机器上的。
    没有copy文件的代码。
    只有一个创建文件夹的代码
      

  10.   

    主要的错误是jdbc连接引起的:
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1902)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2348)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2858)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1570)所以请查看代码中有没有在没有使用完数据库连接就去做关闭连接的操作!
      

  11.   

    用的tomcat自带的连接池
    是用spring来控制的
      

  12.   

    这可能是Tomcat连接池造成的,因为我在国外的几个网站上都看到说tomcat的dbcp有BUG,我建议你做一个proxool的连接池,然后切换试试,我工作中实践证明proxool连接池是经得起海量访问的。
      

  13.   

    proxool 
    我没有用过,
    我去google一下
      

  14.   

    嗯,应该是连接池问题。第一个异常是connection已经断掉再去使用这个连接池去连接。所以速度很慢。第二个好像是DBCP的原因。总的来说DBCP不能再用了,Hibernate已经推荐不要使用它。楼上的proxool很好用,有可视化页面。呵呵。
      

  15.   

    大家的意思是说是tomcat的dbcp这个问题吗?
    OK,听大家的意思,我去下一个proxool来用
    谢谢大家。
      

  16.   


    dbcp依赖的是  commons pool,最近pool刚好升级了,你替换一下看。 Jakarta Commons Pool 1.3 发布http://news.csdn.net/n/20060404/89020.html
      

  17.   

    The EOFException was the result of MySQL crashing...
    In struts-config.xml, add "autoReconnect=true" to data-source value for url property as "jdbc:mysql://localhost/xxx?autoReconnect=true"if not work, 
    Try to add "useServerPrepStmts=false" to your data source 
    as  "jdbc:mysql://localhost/xxx?useServerPrepStmts=false"best regard!
      

  18.   

    to
    laughsmile(海边的星空) ( ) 
    我已经加过autoReconnect=true这句了
      

  19.   

    do you use the newest jdbc driver?
      

  20.   

    应该是最新的
    版本是mysql-connector-java-5.0.0-beta-bin.jar
      

  21.   

    总感觉问题出在MYSQL~~具体问题我也没遇到过~~
      

  22.   

    我对mysql真的是一点也不熟悉,
    也不知道错误在哪里
    有经验的朋友指点一下
      

  23.   

    试试其它版本的mysql的jdbc比如:mysql的jdbc驱动3.0版本
      

  24.   

    public void init(FilterConfig filterConfig) throws ServletException {
    this.encoding = filterConfig.getInitParameter("encoding");
    } public void doFilter(ServletRequest req, ServletResponse resp,
    FilterChain chain) throws IOException, ServletException { try {
    HttpServletRequest request = (HttpServletRequest)req;
    if (request.getMethod().equalsIgnoreCase("post")) {
    if (encoding != null) {
    request.setCharacterEncoding(encoding);
    }
    }
    chain.doFilter(request, resp);
    } catch (Exception e) {

    }
    } public void destroy() {

    }上面是filter的所有代码.
      

  25.   

    mysql有以下几种日志:
    错误日志: -log-err
    查询日志: -log
    慢查询日志:  -log-slow-queries
    更新日志:  -log-update
    二进制日志: -log-bin在mysql的安装目录下,打开my.ini,在后面加上上面的参数,保存后重启mysql服务就行了。
    例如:
    #Enter a name for the binary log. Otherwise a default name will be used.
    #log-bin=
    #Enter a name for the query log file. Otherwise a default name will be used.
    #log=
    #Enter a name for the error log file. Otherwise a default name will be used.
    log-error=
    #Enter a name for the update log file. Otherwise a default name will be used.
    #log-update=上面只开启了错误日志,要开其他的日志就把前面的“#”去掉。把Mysql的所有日志都打开,然后看一下它的日志来确定是不是Mysql的问题。
      

  26.   

    我还是没有解决掉这个问题但现在我把filter不是过滤所有
    只过滤*.jsp页面
    好像两天没有报那个错误了
      

  27.   

    不要什么都用最新的,
    老版本的稳定,
    除非你有时间帮人家找BUG
    (我曾经就花了两天时间,找了个非常隐晦的BUG...,不过找到后确实非常高兴:)
      

  28.   

    好像是字符集不匹配,出现异常跳了出去。没有关掉连接,导致连接量太大,然后tomcat就不干活了吧。自己猜想。lz看看是不是关闭所有的连接了。
      

  29.   

    前期是有连接没有关闭的问题
    可现在基本上已经关闭了。不过还有一部份jdbc的没有测试
    hibernate的基本上还行还有可能就是查询db过多导致
      

  30.   

    就你第一个日志的错误,去我的blog看看吧,我怀疑是下载文件时的错误。http://blog.csdn.net/kaukiyou/archive/2006/04/05/651773.aspx
    第二个错误解决了要告诉大家,避免同样的错误。
      

  31.   

    http://swforum.sun.com/jive/thread.jspa?threadID=51022&messageID=186798其中一段:原文:Well, one of the key things that should be apparent to mysql users, but may not be,
    be sure wait_timeout in your my.cnf file is set to a value greater than the idle_timeout set in your connection pool. (they both are seconds in units)otherwise the server will kill the connection from behind, with the pool thinking it should still be alive, you'll get one of these here SocketException fangles.
    意思是:mysql配置中的wait_timeout值一定要大于等于连接池种的idel_timeout值。否则mysql会在wait_timeout的时间后关闭连接,然而连接池还认为该连接可用,这样就会产生SocketException。