<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 297,  comments - 1618,  trackbacks - 0
         今天一個同事說有個系統出現java.net.SocketException MESSAGE: Broken pipe錯誤,問題描述是這樣的:
         網站很久沒有人登陸后,例如一個晚上沒有登錄,早上看時,出現錯誤,但重啟Tomcat后又不再有問題,錯誤信息如下:
        

    SQL Error: 0, SQLState: 08S01
    [2007-11-20 09:14:30] 72 ERROR [org.hibernate.util.JDBCExceptionReporter]
    Communications link failure due to underlying exception:

    ** BEGIN NESTED EXCEPTION **

    java.net.SocketException
    MESSAGE: Broken pipe

    STACKTRACE:

    java.net.SocketException: Broken pipe
     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:2637)
     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1554)
     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
     at com.mysql.jdbc.Connection.execSQL(Connection.java:3176)
     at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1153)
     at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1266)
     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.loadEntity(Loader.java:1345)
     at org.hibernate.loader.entity.EntityLoader.load(EntityLoader.java:116)
     at org.hibernate.loader.entity.EntityLoader.load(EntityLoader.java:101)
     at org.hibernate.persister.entity.BasicEntityPersister.load(BasicEntityPersister.java:2471)
     at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:351)
     at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:332)
     at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:113)
     at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:151)
     at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:79)
     at org.hibernate.impl.SessionImpl.get(SessionImpl.java:621)
     at org.hibernate.impl.SessionImpl.get(SessionImpl.java:614)
     at com.cotel.dao.BaseDao.getObject(BaseDao.java:180)
     at com.cotel.wfsgprs.bean.systemmanage.LoginBean.login(LoginBean.java:61)
     at com.cotel.wfsgprs.struts.action.login.LoginAction.login(LoginAction.java:70)
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
     at java.lang.reflect.Method.invoke(Method.java:585)
     at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)
     at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:216)
     at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
     at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
     at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
     at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
     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:237)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
     at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:704)
     at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:474)
     at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:409)
     at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
     at com.cotel.util.ValidationFilter.doFilter(ValidationFilter.java:60)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
     at com.cotel.util.PagingFilter.doFilter(PagingFilter.java:42)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
     at com.cotel.util.EncodingFilter.doFilter(EncodingFilter.java:28)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
     at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
     at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
     at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
     at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
     at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
     at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
     at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
     at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
     at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
     at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
     at java.lang.Thread.run(Thread.java:595)


    ** END NESTED EXCEPTION **

           后會自動關閉已打開的連接,再問了一下,他們用的不是c3p0的數據源,建議他們改成c3p0的數據源,明天就能看到是不是由于這個原因引起的,特此記錄。
           找到解決方案的一篇文章:http://wooce.sharera.com/blog/BlogTopic/35599.htm
           該問題的解決方案摘錄如下:
           06/05/15:
    Q:  用hibernate + mysql數據庫, 出現以下問題: 
    Communication link failure: java.net.SocketException, underlying cause: Broken pipe: Broken pipe 
    ** BEGIN NESTED EXCEPTION ** java.net.SocketException MESSAGE: Broken pipe: Broken pipe 
    STACKTRACE: java.net.SocketException: Broken pipe: Broken pipe
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:116)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:183)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:201)
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:1399)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1775)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1020)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1109)
    at com.mysql.jdbc.MysqlIO.sqlQuery(MysqlIO.java:1070)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:2027)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:1984)
    at com.mysql.jdbc.Statement.executeQuery(Statement.java:1152) 
    A:   
    1.  Mysql在經過8小時不使用后會自動關閉已打開的連接,摘錄原文如下: 
    I have a servlet/application that works fine for a day, and then stops working overnight 
    MySQL closes connections after 8 hours of inactivity. You either need to use a connection pool that handles stale connections or use the "autoReconnect" parameter (see "Developing Applications with MySQL Connector/J").

    Also, you should be catching SQLExceptions in your application and dealing with them, rather than propagating them all the way until your application exits, this is just good programming practice. MySQL Connector/J will set the SQLState (see java.sql.SQLException.getSQLState() in your APIDOCS) to "08S01" when it encounters network-connectivity issues during the processing of a query. Your application code should then attempt to re-connect to MySQL at this point.
    2.  Should the driver try to re-establish stale or dead connections? If enabled the driver will throw an exception for a queries issued on a stale or dead connection, which belong to the current transaction, but will attempt reconnect before the next query issued on the connection in a new transaction. The use of this feature is not recommended, because it has side effects related to session state and data consistency when applications don'thandle SQLExceptions properly, and is only designed to be used when you are unable to configure your application to handle SQLExceptions resulting from dead andstale connections properly. Alternatively, investigate setting the MySQL wait_timeout system variable to some high value rather than the default of 8 hours.

    http://dev.mysql.com/doc/refman/5.0/en/cj-configuration-properties.html

    好象用了autoReconnect以后會自動重新連接的
    雖然第一次執行失敗了,
    但是以后會自動重新連接的
    3.  在這個頁面找到了第三種方法,即不使用Hibernate內置的連接池(Hibernate強烈推薦不使用但我以前一直在用),改用C3P0連接池,這個連接池會自動處理數據庫連接被關閉的情況。要使用C3P0很簡單,先從Hibernate里把c3p0-0.8.3.jar復制到項目的lib目錄中,再在hibernate.properties里去掉hibernate.c3p0開頭的那些屬性的注釋(使用缺省值或自己需要的數值),這樣Hibernate就會自動使用C3P0代替內置的連接池了。到目前為止前面的問題沒有再出現過。

    以前對Hibernate警告不要使用內置連接池作產品用途沒有太放在心上,這次是一個教訓,所以不論從穩定還是性能的考慮,都應該選擇相對更加成熟的連接池。
    4.  在服務器上過期的‘Waittimeout’基本上是服務器給與的強制性網絡故障。你通過把‘Waittimeout’設置的高點兒就可以改正它,盡管如此,作為一個開發者,你的代碼應該包含相關的異常處理并采取適當的恢復措施,不要都把它們傳到調用堆中。

        在轉貼一下在hibernate中設置c3p0數據源的方法,原文地址:http://www.lifevv.com/tenyo/doc/20070605102040991.html
         內容如下:
        c3p0為open source的JDBC連接池,隨hibernate一起發布。本文介紹了怎么在hibernate里配置使用c3p0。
    c3p0連接池的配置非常簡單,只需要在hibernate.cfg.xml里增加:

            <!-- configuration pool -->
            <property name="c3p0.acquire_increment">1</property>
            <property name="c3p0.idle_test_period">100</property> <!-- seconds -->
            <property name="c3p0.max_size">5</property>
            <property name="c3p0.max_statements">0</property>
            <property name="c3p0.min_size">2</property>
            <property name="c3p0.timeout">90</property> <!-- seconds -->

    另外,還需要在CLASS_PATH里加上c3p0-x.x.x.jar文件(x.x.x為版本號),c3p0-x.x.x.jar文件隨hibernate一起發布,你可以在其lib目錄下找到該文件。

    配置好之后,hibernate便會自動使用c3p0的連接池:C3P0ConnectionProvider

    posted on 2007-11-26 11:16 阿蜜果 閱讀(7555) 評論(0)  編輯  收藏 所屬分類: MySql
    <2007年11月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

          生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
          我的作品:
          玩轉Axure RP  (2015年12月出版)
          

          Power Designer系統分析與建模實戰  (2015年7月出版)
          
         Struts2+Hibernate3+Spring2   (2010年5月出版)
         

    留言簿(263)

    隨筆分類

    隨筆檔案

    文章分類

    相冊

    關注blog

    積分與排名

    • 積分 - 2294512
    • 排名 - 3

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 日韩毛片免费在线观看| 91香蕉在线观看免费高清| 成人毛片18岁女人毛片免费看 | 国产精品美女自在线观看免费| 亚洲欧洲久久精品| 99久久免费国产精品特黄| 亚洲香蕉在线观看| 一二三四免费观看在线电影| 在线观看日本亚洲一区| 免费中文字幕一级毛片| 国产国产人免费人成成免视频| 国产成人无码综合亚洲日韩| 一级毛片在线免费观看| 亚洲国产成人九九综合| 四虎成人免费观看在线网址| 亚洲精品av无码喷奶水糖心| 国产91久久久久久久免费| 成在人线av无码免费高潮水| 亚洲AV人人澡人人爽人人夜夜| 精品免费人成视频app| 亚洲精品成a人在线观看夫| 久久精品国产亚洲Aⅴ蜜臀色欲| 拍拍拍无挡免费视频网站| 亚洲白色白色在线播放| 日韩免费高清一级毛片在线| 一级特黄特色的免费大片视频| 亚洲av永久无码精品古装片| 青青青国产在线观看免费网站| 亚洲AV无码精品国产成人| 在线亚洲午夜理论AV大片| 亚洲美女免费视频| 国产精品亚洲二区在线| 亚洲激情在线视频| 日本免费一区尤物| 日韩精品无码免费专区网站| 91丁香亚洲综合社区| 狠狠色婷婷狠狠狠亚洲综合 | 相泽亚洲一区中文字幕| 亚洲免费一级视频| 特色特黄a毛片高清免费观看| 久久久亚洲欧洲日产国码aⅴ |