有几个方面会造成连接不用时被断开
1. 数据库设置在用户会话空闲时间超过一,会断开连接
2. 操作系统可能也会监测非活动的连接,超过某个时值断掉
3. 连接经过了路由器等网络设备,设备监测到非活动连接超过某个时值断掉
通常在 ftp、telnet 或 ssh 连接可以定期发送空操作 nop,以使服务器不会断开连接。而对于数据库连接池也是因连接池的实现不同而有不同的解决办法。
你可以在连接池实现中定期执行一个最不耗资源的数据库操作,相当于 nop 空操作。比如 C3P0 连接池可以这样配置:
60 这是我们原来对付路由器的限制用的办法
在 was 中,你可以把连接池的 “时效超时” 属性设置的比 30 分钟小点,使连接池中的连接在服务器杀它这前主动断开,这样肯定是会影响到连接池的性能,更为频繁的获取连接。
实际中你应该找到是在哪一层对空闲连接的超时限制,比如 AS400 上的限制,或DB2 的会话空闲时长设置,然后改长到一个更为合适的时间。