Tomcat在重负载下失败

时间:2012-06-03 11:18:40

标签: tomcat crash load timeout

我正在使用tomcat服务器7(& JRE 1.6)在debian VPS上运行基于数据库的重型GWT应用程序。我的应用程序包含许多通过tomcat连接池与MySQL5数据库通信的java servlet(没有连接池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&amp;characterEncoding=UTF-8&amp;characterSetResults=UTF-8&amp;connectionCollation=UTF8_PERSIAN_CI&amp;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>

任何想法?

4 个答案:

答案 0 :(得分:3)

您需要提供有关资源利用率的更多详细信息。但根据您的描述,您可能遇到HTTP线程池耗尽的问题。默认情况下(使用BIO连接器)Tomcat只能处理200个并发连接,AFAIK可以在待办事项队列中“保持”许多连接。

这意味着只能同时处理200个连接,另外100个连接将等待池。第301条连接将被拒绝或超时。

以下是要检查的内容:

  • HTTP线程池利用率
  • 积压队列大小
  • 垃圾收集活动

Tomcat提供了有价值的 metrics for that。您可能还会发现我的文章squeezing more concurrent connections from Tomcat很有用。

答案 1 :(得分:1)

BIO连接器中的最新错误可能是此处的一个因素。

请参阅:https://issues.apache.org/bugzilla/show_bug.cgi?id=53186

但是,如果您的应用程序在3分钟内使用数据库连接池崩溃,则应用程序或数据库处理代码可能出现问题。

答案 2 :(得分:1)

您可以在/TOMCAT_DIR/bin/catalina.sh中更改CATALINA_OPTS参数以进行并发垃圾回收

CATALINA_OPTS="-XX:+UseConcMarkSweepGC -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime -Xloggc:/TOMCAT_DIR/logs/gc.log"

答案 3 :(得分:0)

使用tomcat集群和apache网络加载blanc