java.net.SocketException: Software caused connection abort: 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 java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)  at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)  at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2690)  at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2619)  at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1552)  at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)  at com.mysql.jdbc.Connection.execSQL(Connection.java:2978)  at com.mysql.jdbc.Connection.execSQL(Connection.java:2902)  at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:933)  at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1027)  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 org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:603)  at com.qiyilighting.hibernate.QiYiHibernateImpl$12.execute(QiYiHibernateImpl.java:187)  at com.qiyilighting.util.HibernateTemplate.find(HibernateTemplate.java:69)  at com.qiyilighting.hibernate.QiYiHibernateImpl.findManagerByLogin(QiYiHibernateImpl.java:190)  at com.qiyilighting.struts.action.LoginAction.execute(LoginAction.java:128)  at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)  at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)  at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)  at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)  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.qiyilighting.struts.filter.EncodingFilter.doFilter(EncodingFilter.java:23)  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)  at com.qiyilighting.struts.filter.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:24)  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.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199)  at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)  at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:754)  at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:684)  at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:876)  at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)  at java.lang.Thread.run(Thread.java:595)

解决方案 »

  1.   

    java.net.SocketException: Software caused connection abort: socket write error 这个会是什么原因呢?感谢大家对我这个问题的关注,谢谢。
      

  2.   

    线程写出错,你试试看能不能做一下dump文件看看线程。
      

  3.   

    请教楼上的大哥,如何做dump文件看看线程啊,小弟是新手上路,谢谢你的帮助。
    ========================================================================
    我对这个项目报错的分析如下:根据日志的报错,我能够定位到报错的是在QiYiHibernateImpl类的findManagerByLogin()方法(187行),相关代码如下:
    Query query = session.createQuery("From Manager m Where m.logName = :logName");
    query.setString("logName", logName);
    Manager manager = (Manager)query.uniqueResult();从这些代码中,我想有两种可能:一是session有问题;二是Query及HQL的问题。既然平时大部分时间都能够正常运行,我想基本上能够排除Query及HQL的问题。而这里的session由HibernateSessionListener在请求创建时就已产生。在这个项目中,SessionFactory在ApplicationListener里就创建了,而此后的HibernateSessionFactory这个类能够判断SessionFactory是否存在,若不存在则创建SF,存在的话就不执行代码。我始终想不明白的问题是:
    一、为什么会正常运行一段时间之后会无法和数据库交互导致无法登录?这个系统目前还没有正式投入使用,每天的访问量很少很少。奇怪的是平时都能够正常运行,这说明代码应该没有问题啊?是不是这其中还会有其他的原因,比如内存溢出啊,或者其他什么底层的对象由于时间的推迟而失效或者溢出之类。我怀疑tomcat或mysql服务器那边会有与时间相关的东西,而我目前所知道的只是服务器那边告诉我每晚10点服务器会重启,可是有很多天我10点以后访问系统仍然可以正常登录。二、为什么重新上传web.xml之后就能够马上恢复正常?重新上传web.xml之后tomcat那边会发生什么吗?