在Windows中,当我停止tomcat时,应用程序将释放hold on database,因为应用程序将停止使用tomcat ...但是在Ubuntu中,即使我停止了tomcat应用程序,它也不会释放对数据库的访问权限。 / p>
我试过
sudo /etc/init.d/tomcat6 stop
sudo service tomcat6 stop
我不能使用pkill,因为如果我终止进程,即使连接到数据库服务器也会被释放。我需要手动启动它。我只想从应用程序中释放对数据库的访问权限。我该怎么办?
有没有tomcat持有该应用程序的任何地方?或者其他任何处理暂停?
Windows与Ubuntu之间的区别是什么?
答案 0 :(得分:0)
如果你通过突然杀死tomcat而停止它,而不是以允许正常关闭的方式停止它,它将无法发送网络数据包告诉PostgreSQL连接已关闭。如果PostgreSQL正在侦听下一个tomcat请求,它会等待很长时间,从来没有任何关于tomcat死的线索。
TCP具有名为“keepalives”的可配置功能,该功能会使侦听器在连接空闲时定期发送数据包,以测试连接是否仍然良好。请参阅以“tcp_keepalives_”开头的connection configuration settings。我建议你试试像:
tcp_keepalives_idle = 60
tcp_keepalives_interval = 1
这将允许PostgreSQL在一分钟内检测到断开的连接,而不会造成很大的开销。这将告诉PostgreSQL在空闲连接上等待60秒,然后再发送额外的数据包来测试连接是否仍然正常,并发送重试一秒钟。 (我认为它会尝试九次。)如果没有任何数据包被应答,PostgreSQL将关闭连接并且该过程将优雅地消失。