Broken pipe問題分析

現象

  應用程序與HiveServer2建立了連接池,用戶在使用應用服務時,後端出現Broken pipe的異常堆棧:

[ERROR][2019-03-29T15:19:30.599+0800][AdhocHiveSQLHandler.java:57] _undef||traceid=645949405c9dc6ff1aca0f0905f64c02||spanid=081006710e526ddc||_msg=getHeader fails: {}
org.springframework.dao.DataAccessResourceFailureException: PreparedStatementCallback; SQL [select * from (SELECT 1) as bYqLqKBLre limit 0org.apache.thrift.transport.TTransportException: java.net.SocketException: Broken pipe; nested exception is java.sql.SQLException: org.apache.thrift.transport.TTransportException: java.net.SocketException: Broken pipe
        at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:107)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
        at org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1402)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:620)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:657)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:688)

產生原因

  當向已經失效的連接中寫入數據時,操作系統會拋出Broken pipe錯誤。常見的連接失效的情況有以下幾種:

  1. 連接對端應用重啓或者掛掉;
  2. 網絡中斷;

  經過與HIVE引擎確認,當時HIVE引擎在升級,而當前應用使用連接池時沒有配置有效性檢測的參數,導致出現問題;

參考:

  1. http://lovestblog.cn/blog/2014/05/20/tcp-broken-pipe/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章