<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

    積分與排名

    • 積分 - 2294312
    • 排名 - 3

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 99视频在线免费| 亚洲人成电影网站免费| 免费毛片a在线观看67194| 国产亚洲AV夜间福利香蕉149| 亚洲AV成人精品日韩一区| 在线免费观看毛片网站| 亚洲精品乱码久久久久久V| 在线播放高清国语自产拍免费| 99久久婷婷国产综合亚洲| 成人男女网18免费视频| 亚洲丶国产丶欧美一区二区三区| 在线永久免费观看黄网站| 无码天堂va亚洲va在线va| 亚洲成av人在片观看| 成人免费ā片在线观看| 亚洲国产精品无码久久SM| 91视频免费网址| 亚洲精华国产精华精华液好用| 四虎AV永久在线精品免费观看| h视频免费高清在线观看| 国产国拍亚洲精品mv在线观看 | 亚洲精品无码久久久久APP| 国产伦一区二区三区免费 | 免费无码又爽又刺激高潮软件| 久久精品国产亚洲AV麻豆不卡| 国产精品成人免费福利| 亚洲精品天堂无码中文字幕| 亚洲精品和日本精品| 久久久免费精品re6| 亚洲精品av无码喷奶水糖心| 久久激情亚洲精品无码?V | 国内大片在线免费看| 九九免费观看全部免费视频| 亚洲一区二区成人| 成人人免费夜夜视频观看| 一级毛片a女人刺激视频免费| 午夜亚洲国产理论秋霞| 日本一道高清不卡免费| baoyu777永久免费视频 | 久久久久国产成人精品亚洲午夜 | 久久精品无码精品免费专区|