我负责一个遗留的Tomcat for应用程序,它以webapp /ROOT的形式运行。以前,该应用程序运行在一个专用的Linux服务器上,但为了省钱,我被要求将它移到另一个Linux服务器上,在那里它与几个PHP应用程序共享一个MySQL数据库。它们都是使用VirtualHosts通过Apache 2提供的。
从现在开始,Tomcat应用程序似乎在很大程度上“消耗”了所有数据库连接,以至于Tomcat应用程序不会响应请求,但是服务器上的PHP应用程序也不会响应请求。Tomcat的重新启动解决了问题。
目前,我的黑客是设置一个cron工作,以弹跳Tomcat每天晚上。这减少了这些事件的数量,但它们仍然偶尔发生。
在这个应用程序中,数据库连接是用server.xml定义的。我尝试过修改maxActive。最初,它被设置为99,但我更改为-1,但它似乎没有帮助的方式或其他方式。
<Resource name="jdbc/theApp" auth="Container"
type="javax.sql.DataSource"
username="tomcat"
password="thePassword"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/theApp?autoReconnect=true"
maxActive="-1"
maxIdle="20"
maxWait="3000"
removeAbandoned="true"
removeAbandonedTimeout="300"
logAbandoned="true"/> 问:有人看到这个了吗?如果没有,是否有办法帮助诊断出了什么问题?没有原始的开发团队。
发布于 2009-12-06 18:27:42
我见过两种不同的应用程序最终争夺mysql连接池资源的情况。大多数情况下,它可以通过mysql调优来解决,但在某些情况下,这是一个必须解决的应用程序的问题。
查看mysql cli显示的内容,PROCESSLIST命令将使您了解连接池正在做什么。我还将查看优秀的mysql调优入门脚本,以了解mysql环境。它在这里被跟踪:http://forge.mysql.com/projects/project.php?id=44
如果您真的只想限制tomcat应用程序可能造成的破坏,则可以始终将容器的最大连接设置为小于mysql的max_connections变量的数字。
https://serverfault.com/questions/91491
复制相似问题