postgresql - 如何在 ubuntu 12.04 上从 tomcat 释放对应用程序的访问权限

标签 postgresql tomcat ubuntu tomcat6 ubuntu-12.04

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

我试过

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

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

tomcat 是否有存放应用程序的地方?或者那里有任何其他暂停的过程?

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

最佳答案

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

TCP 有一个称为“keepalives”的可配置特性,它会导致监听器在连接空闲时定期发送数据包,以测试连接是否仍然良好。查看connection configuration settings以“tcp_keepalives_”开头。我建议您尝试类似的方法:

tcp_keepalives_idle = 60
tcp_keepalives_interval = 1

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

关于postgresql - 如何在 ubuntu 12.04 上从 tomcat 释放对应用程序的访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11735864/

相关文章:

postgresql - 使用谓词进行日期过滤的条件查询

sql - PostgreSQL 声明具有显式数据类型的变量

MySQL连接ip从指定的ip地址变化

PHP.ini 不会自动加载,即使它存在于配置位置

linux - 在每个 bash 创建一个命令后在 screen 上运行命令

windows - 使用 Windows 将 PostgreSQL shell 输出保存到文件

windows - 无法获取在 Windows 版本上运行的示例 C 函数

java - Log4j - 如何记录应用程序名称?

Apache tomcat 8.5 用户不工作

java - Struts2 PermGen 内存不足错误