背景描述:使用quartz建立多个定时任务,每5分钟执行一次。定时任务中包含httpclient的网络访问,及druid的数据库访问。执行一段时间后不定期(可能10天半个月,可能好几个月)卡死。
表现状况为:
- 日志到某个时间点突然没有输出了,也没有异常日志记录,排除当时磁盘空间不足的问题
httpclient使用的4.3版本,出问题的生成环境下已在request中设置3种超时时间。实际测试中除了setConnectTimeout与setConnectionRequestTimeout即使不设置,程序也会抛出超时异常。只有当setSocketTimeout不设置的时候,程序会出现日志不打印一直卡死的状况,但与我要解决的问题来看还是有略微区别。当时的内存状况不一致。(图1为生产环境上卡死时的内存,图2为本机测试时,故意不设置setSocketTimeout超时情况下的内存图 )
(图1)
(图2)
生成环境下设置了数据库超时,本机测试时暂时还没有测试数据库超时的情况。
下次生成环境上再发生此类状况的排查步骤:
- 本机打开jdk安装目录下的