【发布时间】:2012-06-03 11:18:40
【问题描述】:
我正在使用 tomcat server 7 (& JRE 1.6) 在 debian VPS 上运行一个基于 db 的重型 GWT 应用程序。我的应用程序包含许多 java servlet,它们通过 tomcat 连接池与 MySQL5 数据库进行通信(没有连接池,mysql 将在 3 分钟内崩溃!)
我的应用程序运行良好,而 Tomcat 服务器上没有繁重的负载,但是当在线用户数量和他们的请求增加时,tomcat 服务器失败没有有用的日志或错误消息(我只是收到一个连接超时错误当我想访问在 tomcat 上运行的任何 Web 应用程序时)并且这个问题一直存在,直到我重置我的 tomcat 服务器。我知道我的 VPS 没有内存限制,也没有任何 MySQL 连接问题,所以我真的不知道会导致这种情况:(
这是 server.xml 中的主机标签(我有很多这样的虚拟主机,但所有的主机标签都相似)
<Host name="sub1.mydomain.com" appBase="/var/www/sites/gwt_app" >
<Context path="" reloadable="true" docBase="myDocBase"
xmlValidation="false" xmlNamespaceAware="false" crossContext="true" >
<Resource name="jdbc/mysql/db" auth="Container" type="javax.sql.DataSource"
initialSize="3" maxActive="50" maxIdle="10"
maxWait="15000" removeAbandoned="true" removeAbandonedTimeout="120"
validationQuery="select now();"
username="user_1" password="pass" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/db_1?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8&connectionCollation=UTF8_PERSIAN_CI&noAccessToProcedureBodies=true"
/>
</Context>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/var/www/sites/gwt_app_logs" prefix="tomcat_access_" suffix=".log" pattern="common" resolveHosts="false"/>
</Host>
有什么想法吗?
【问题讨论】:
-
当你说Tomcat“崩溃”时,实际发生了什么?您是否在错误日志中发现异常?如果是这样,它们是什么? JVM是否失败并且进程死亡?如果是这样,您是否获得了核心转储或 hs_* 文件?如果 Tomcat 仍在运行但没有响应请求,请进行线程转储(或多个)并将它们发布到某个地方。此外,发布您的
和 配置(减去任何敏感信息,如密码等)会有所帮助。 -
我再问一遍:“Tomcat 服务器出现故障”时会发生什么?如果进程仍在运行,您需要进行一些线程转储并发布它们,以便我们可以看到服务器实际在做什么。
-
jstack/jmap 是你的朋友,使用它们