1

在 Windows 中,当我停止 tomcat 时,应用程序将释放对数据库的保留,因为应用程序将与 tomcat 一起停止......但在 Ubuntu 中,即使我停止 tomcat 应用程序,它也不会释放对数据库的访问。

我试过了

sudo /etc/init.d/tomcat6 stop
sudo service tomcat6 stop

我不能使用 pkill,因为如果我终止进程,甚至与数据库服务器的连接也会被释放。我需要手动启动它。我只想释放应用程序对数据库的访问权限。我该怎么做?

是否有tomcat持有该应用程序?或任何其他暂停的过程?

是什么造成了 Windows 和 Ubuntu 之间的差异?

4

1 回答 1

0

如果您通过突然杀死它来停止 tomcat,而不是以允许正常关闭的方式停止它,它将无法发送网络数据包来告诉 PostgreSQL 连接已关闭。如果 PostgreSQL 正在监听下一个 tomcat 请求,它将等待很长时间,永远不会有任何线索表明 tomcat 已经死了。

TCP 有一个称为“keepalives”的可配置功能,它使侦听器在连接空闲时定期发送数据包,以测试连接是否仍然良好。查看以“tcp_keepalives_”开头的连接配置设置。我建议您尝试以下方法:

tcp_keepalives_idle = 60
tcp_keepalives_interval = 1

这将允许 PostgreSQL 在一分钟多一点的时间内检测到断开的连接,而不会造成太多开销。这将告诉 PostgreSQL 在空闲连接上等待 60 秒,然后再发送额外的数据包以测试连接是否仍然良好,并每隔一秒发送重试。(我认为它尝试了九次。)如果没有一个数据包得到应答,PostgreSQL 将关闭连接,进程将优雅地离开。

于 2012-08-01T11:27:52.107 回答