代码之家  ›  专栏  ›  技术社区  ›  Aaron Fi

调试在~39分钟后关闭的MySQL连接的最佳方法?

  •  1
  • Aaron Fi  · 技术社区  · 14 年前

    我有hibernate 3.3、c3p0、mysql 5.1和spring。 我的服务调用中的mysql连接在~39分钟后一直关闭。我的服务呼叫的自然运行时间约为5小时。

    我尝试改变各种c3p0配置等,以避免39分钟的上限。没有运气。

    是否有更直接、系统的方法记录或排除故障?我能知道吗 为什么 连接正在关闭,并且 ,在哪一层?

    更新:堆栈跟踪

    24 Oct 2010 02:22:12,262 [WARN] 012e323c-df4b-11df-89ed-97e9a9c1ac19 (Foobar Endpoint : 3) org.hibernate.util.JDBCExceptionReporter: SQL Error: 0, SQLState: 08003
    24 Oct 2010 02:22:12,264 [ERROR] 012e323c-df4b-11df-89ed-97e9a9c1ac19 (Foobar Endpoint : 3) org.hibernate.util.JDBCExceptionReporter: No operations allowed after connection closed.
    24 Oct 2010 02:22:12,266 [ERROR] 012e323c-df4b-11df-89ed-97e9a9c1ac19 (Foobar Endpoint : 3) org.hibernate.event.def.AbstractFlushingEventListener: Could not synchronize database state with session
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   Pascal Thivent    14 年前

    我有hibernate 3.3、c3p0、mysql 5.1和spring。我的服务调用中的mysql连接在~39分钟后一直关闭。我的服务呼叫的自然运行时间约为5小时。

    我不确定我明白了。您的进程是否应该运行5小时,但当前在~39mn(或可能2400秒)后中止?你能确认吗?以前工作的是什么?你有什么改变吗?

    同时,以下是一些想法:

    • 从数据库开始(请参见 B.5.2.11. Communication Errors and Aborted Connections )
      • 用启动服务器 --log-warnings 选项并检查日志中是否有可疑消息
      • 看看您是否可以使用数据库主机上的mysql客户机重现这个问题。
      • 如果可以,在应用服务器机器上执行相同的操作
      • 如果可以的话,你就会知道mysql是可以的
    • 在应用服务器级别移动
      • 激活(休眠和 C3P0 )得到一个 全堆栈跟踪 和/或更多关于罪犯的线索
      • 另外,请显示您的c3p0配置设置

    别忘了使用Hibernate时,c3p0的配置是 very specific 一些设置必须在 c3p0.properties 文件。