db2 Bean遇到非应用程序异常;嵌套异常为:异常错误,JDBC连接异常:无法执行查询

1bqhqjot  于 2022-11-07  发布在  DB2
关注(0)|答案(2)|浏览(286)

我有时会收到以下异常:

ERROR : 07.16.2021:0709 (05.988) [[]http-nio-8080-exec-4] ShippingSatelliteForm: /addLeadTimeForShippingBakeries.xhtml, user - The bean encountered a non-application exception; nested exception is: ERROR : 07.16.2021:0709 (05.988) [[]http-nio-8080-exec-4] ShippingSatelliteForm: /addLeadTimeForShippingBakeries.xhtml, user - The bean encountered a non-application exception; nested exception is:  org.hibernate.exception.JDBCConnectionException: could not execute query 

Caused by: com.ibm.db2.jcc.am.DisconnectNonTransientConnectionException: [jcc][t4][2030][11211][4.21.29] A communication error occurred during operations on the connection's underlying socket, socket input stream,  Caused by: com.ibm.db2.jcc.am.DisconnectNonTransientConnectionException: [jcc][t4][2030][11211][4.21.29] A communication error occurred during operations on the connection's underlying socket, socket input stream, or socket output stream.  Error location: Reply.fill() - insufficient data (-1).  Message: Insufficient data. ERRORCODE=-4499, SQLSTATE=08001

我已经在Azure Kubernetes中部署了应用程序,而DB2在内部部署-这是由于不同的网络造成的吗?

i7uaboj4

i7uaboj41#

我猜是这样,但我会尝试添加hibernate.c3p0.max_idle_time=300,让连接池每隔5分钟回收一次连接。这可以防止连接存活足够长的时间,让其他人(数据库、防火墙等)决定杀死它...

4smxwvx5

4smxwvx52#

请尝试测试在以下时间后是否仍能使用空闲连接:

  • 十五秒
  • 30秒
  • 60秒

等等。
最有可能的情况是,您使用某种NAT路由、虚拟(覆盖)网络、负载平衡器等来删除空闲连接,以避免内存不足。
如果您每秒运行许多查询,则连接池对于实现良好的性能非常重要,但是,如果您在许多秒内都不需要连接,则可以执行以下操作之一:

  • 关闭连接
  • 重新测试它是否仍然有效
  • 配置TCP保持活动(在服务器或客户端)

默认的TCP Keep-Alive设置取决于操作系统配置,通常需要启用和设置正确的频率,因为默认频率通常太晚以避免超时。从Java设置这些设置只是最近才变得实用,DB2驱动程序可能还不支持。
请参阅:如何在java或netty中设置套接字选项(TCP_KEEPCNT,TCP_KEEPIDLE,TCP_KEEPINTVL)?
然而,您的应用程序应该为各种问题做好准备,因为:https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing,因此您可能希望添加某种重试逻辑,以处理现在或将来可能出现的任何类型的网络问题。

相关问题