Tomcat + mod_jk阻止其他Apache 2 VirtualHost应用程序的MySQL连接

我有责任使用作为webapps / ROOT运行的传统Tomcat webapp。 此前该应用程序运行在专用的Linux服务器上,但为了节省资金,我被要求将其移动到不同的Linux服务器,在该服务器上与几个PHP应用程序共享一个MySQL数据库。 他们都使用VirtualHosts通过Apache 2喂食。

由于移动了Tomcat应用程序似乎讽刺地“消耗”了所有数据库连接,Tomcat应用程序将不会响应请求,但服务器上的PHP应用程序也不会响应请求。 重新启动Tomcat可以解决问题。

目前,我的黑客是build立一个cron的工作,每天晚上反弹雄猫。 这减less了这些事件的数量,但它们偶尔也会发生。

在这个应用程序中,数据库连接在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"/> 

问:有没有人看过? 如果没有,有没有办法帮助诊断出了什么问题? 最初的开发团队不可用。

我已经看到了两种不同的应用程序最终争夺mysql连接池资源的几种情况。 大多数情况下,它可以通过mysql调优来解决,但在某些情况下,这是一个需要解决的应用程序的问题。

看一下像mysql cli SHOW PROCESSLIST这样的命令会给你一个连接池正在做什么的想法。 我也看看优秀的mysql调优引导脚本来了解mysql环境。 它在这里跟踪: http : //forge.mysql.com/projects/project.php?id=44

如果你真的只想限制tomcat应用程序可以做的损害,你可以将容器的最大连接数设置为小于mysql的max_connectionsvariables。