3

다음은 스택 추적입니다. 나는 끊어진 파이프가 8 시간 동안 밀폐 된 연결과 연결이 자동으로 닫혀 있기 때문이라고 읽었습니다. 이 http://itellity.wordpress.com/2011/05/18/getting-rid-of-socketexception-broken-pipe-with-quartz-and-mysql-on-jboss/을 보았습니다. 로컬 컴퓨터에서 재생할 수 없습니다.java.net.SocketException : Quartz와 MySQL 및 Tomcat이있는 파이프가 깨졌습니다. (Tomcat Crash)

  1. 내 로컬 컴퓨터에서이를 재현 할 수있는 방법이 있습니까?
  2. tomact 크래시가 발생합니까? 나는 quartz jar 1.6.5와 tomcat 6.0.18의 아주 오래된 버전을 사용하고 있습니다. 그것이 문제가 될 것입니다.

이 문제를 해결하는 데 도움을주십시오.

[Scheduler_QuartzSchedulerThread] WARN org.quartz.impl.jdbcjobstore.JobStoreTX - Failed to override connection auto commit/transaction isolation. 
com.mysql.jdbc.CommunicationsException: 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:2744) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1612) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3277) 
    at com.mysql.jdbc.Connection.setAutoCommit(Connection.java:5442) 
    at org.apache.commons.dbcp.DelegatingConnection.setAutoCommit(DelegatingConnection.java:237) 
    at org.quartz.impl.jdbcjobstore.AttributeRestoringConnectionInvocationHandler.setAutoCommit(AttributeRestoringConnectionInvocationHandler.java:91) 
    at org.quartz.impl.jdbcjobstore.AttributeRestoringConnectionInvocationHandler.invoke(AttributeRestoringConnectionInvocationHandler.java:65) 
    at $Proxy4.setAutoCommit(Unknown Source) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.getConnection(JobStoreSupport.java:711) 
    at org.quartz.impl.jdbcjobstore.JobStoreTX.getNonManagedTXConnection(JobStoreTX.java:72) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3757) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.acquireNextTrigger(JobStoreSupport.java:2729) 
    at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:266) 


** END NESTED EXCEPTION ** 



Last packet sent to the server was 1 ms ago. 
    at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2759) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1612) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3277) 
    at com.mysql.jdbc.Connection.setAutoCommit(Connection.java:5442) 
    at org.apache.commons.dbcp.DelegatingConnection.setAutoCommit(DelegatingConnection.java:237) 
    at org.quartz.impl.jdbcjobstore.AttributeRestoringConnectionInvocationHandler.setAutoCommit(AttributeRestoringConnectionInvocationHandler.java:91) 
    at org.quartz.impl.jdbcjobstore.AttributeRestoringConnectionInvocationHandler.invoke(AttributeRestoringConnectionInvocationHandler.java:65) 
    at $Proxy4.setAutoCommit(Unknown Source) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.getConnection(JobStoreSupport.java:711) 
    at org.quartz.impl.jdbcjobstore.JobStoreTX.getNonManagedTXConnection(JobStoreTX.java:72) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3757) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.acquireNextTrigger(JobStoreSupport.java:2729) 
    at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:266) 
[Scheduler_QuartzSchedulerThread] WARN org.quartz.impl.jdbcjobstore.AttributeRestoringConnectionInvocationHandler - Failed restore connection's original auto commit setting. 
com.mysql.jdbc.CommunicationsException: 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:2744) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1612) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3277) 
    at com.mysql.jdbc.Connection.setAutoCommit(Connection.java:5442) 
    at org.apache.commons.dbcp.DelegatingConnection.setAutoCommit(DelegatingConnection.java:237) 
    at org.quartz.impl.jdbcjobstore.AttributeRestoringConnectionInvocationHandler.restoreOriginalAtributes(AttributeRestoringConnectionInvocationHandler.java:134) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.cleanupConnection(JobStoreSupport.java:3551) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3774) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.acquireNextTrigger(JobStoreSupport.java:2729) 
    at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:266) 


** END NESTED EXCEPTION ** 



Last packet sent to the server was 0 ms ago. 
    at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2759) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1612) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3277) 
    at com.mysql.jdbc.Connection.setAutoCommit(Connection.java:5442) 
    at org.apache.commons.dbcp.DelegatingConnection.setAutoCommit(DelegatingConnection.java:237) 
    at org.quartz.impl.jdbcjobstore.AttributeRestoringConnectionInvocationHandler.restoreOriginalAtributes(AttributeRestoringConnectionInvocationHandler.java:134) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.cleanupConnection(JobStoreSupport.java:3551) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3774) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.acquireNextTrigger(JobStoreSupport.java:2729) 
    at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:266) 
[Scheduler_QuartzSchedulerThread] ERROR org.quartz.core.ErrorLogger - An error occured while scanning for the next trigger to fire. 
org.quartz.JobPersistenceException: Couldn't acquire next trigger: 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:2744) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1612) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3277) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3206) 
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1447) 
    at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:177) 
    at org.quartz.impl.jdbcjobstore.StdJDBCDelegate.selectTriggerToAcquire(StdJDBCDelegate.java:2924) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.acquireNextTrigger(JobStoreSupport.java:2747) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport$36.execute(JobStoreSupport.java:2733) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3760) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.acquireNextTrigger(JobStoreSupport.java:2729) 
    at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:266) 


** END NESTED EXCEPTION ** 



Last packet sent to the server was 1 ms ago. [See nested exception: com.mysql.jdbc.CommunicationsException: 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:2744) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1612) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3277) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3206) 
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1447) 
    at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:177) 
    at org.quartz.impl.jdbcjobstore.StdJDBCDelegate.selectTriggerToAcquire(StdJDBCDelegate.java:2924) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.acquireNextTrigger(JobStoreSupport.java:2747) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport$36.execute(JobStoreSupport.java:2733) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3760) 
    at org.quartz.impl.jdbcjobstore.JobStoreSupport.acquireNextTrigger(JobStoreSupport.java:2729) 
    at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:266) 


** END NESTED EXCEPTION ** 

편집 : 내 석영 특성에

org.quartz.dataSource.QUARTZ_NO_TX.validateOnCheckout = true 
org.quartz.dataSource.QUARTZ_NO_TX.validationQuery = select 1 

을 사용하고 또한

autoreconnect=true 

내가 MySQL의 등록 정보를 변경하여이 문제를 재현 할 수있는 방법이 있습니까. 나는 내 서버에서만 이것을 얻고있다.

+0

당신은 제공된 링크의 세부 사항에서 해결할 수 없다고 말합니다. 정확히 무엇을 시도 했습니까? 또한, 8 시간을 수용하기 위해 밤새도록 운영하는 것이 어떻습니까? – aldrin

+0

빠른 응답을 해주신 알 드린에게 감사드립니다. 나는 내가 시도한 것을 편집했다. 8 시간 4 ~ 5 시간이 아닌 몇 시간 동안 그대로 두었습니다. 여전히이 오류가 발생하지 않습니다. 이것이 Tomcat 서버를 손상시킬 수있는 가능성이 있습니까? –

+0

처음 두 문장을 추가 할 때 오류가 발생했습니다. 그래서 나는 그것이 작동하지 않는다고 말했다. 이제 나는 그것을 고쳤다. 나는 서버 테스트에서 8 시간 동안 노력할 것이고, 당신에게 알려줄 것이다. 답장을 보내 주셔서 감사합니다. –

답변

4

8 시간 후에 삭제되는 MySQL stale connection과 관련이 있다고 생각합니다.

편집

읽기 this 기사를.

다음과 같은 설정이 있는지 확인합니다 (정확한 속성의 이름에 대해 확실하지하지만 그들은 아래에 언급 된 유사해야합니다) 를 "1 선택"

  1. testWhileIdle = 사실
  2. validationQuery =
  3. minEvictableIdleTimeMillis = 1800000
  4. timeBetweenEvictionRunsMillis = 1800000
  5. numTestsPerEvictionRun = 3
+0

답장 aviad 주셔서 감사합니다. 문제는 석영 스케쥴러에서 이것을 피하는 방법입니다. –

+0

@Dilip Rajkumar, 응용 프로그램 서버 DataSource를 올바르게 구성해야합니다. 내 편집을 참조하십시오. – aviad

+0

예 aviad, org.quartz.dataSource.myDS.validateOnCheckout = true로 시도하고 있습니다. org.quartz.dataSource.myDS.validationQuery = select 1 테스트를 마친 후 알려 드리겠습니다. 고마워요. –