最近的项目中发现一个问题,如果数据库的SQL执行时间过长,比如2个小时的时候。
应用程序一等处于等待状态,而数据库的SQL已经执行完成了。感觉比较怪异。
查看log,应用程序没有任何错误信息,只要数据库输出了如下的信息:
1.could not send data to client: XXX
2.unexpected EOF on client connection
3. disconnection: session time: 0:00:30.26 user=postgres database=postgres host=[local] port=
有这地方可以发现是数据库执行完SQL的时候找不到客户端的连接信息了。
刚开始怀疑是网络问题,但测试一下发现,如果是网络问题客户端也会出异常的。
最后怀疑到防火墙,防火墙的健康检查时间时间下是不是做了啥动作。
终于发现了防火墙健康检查的把进程删除了。而导致这个动作的原因是 KeepAlive的值没有设置合理。
参考URL:http://d.hatena.ne.jp/learn/20101016/p1