4

我正在使用 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&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

4 回答 4

3

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

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

以下是要检查的指针:

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

Tomcat 为此提供了有价值的 指标。您可能还会发现我关于从 Tomcat 挤压更多并发连接的文章很有用。

于 2012-06-03T11:29:11.883 回答
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"
于 2012-06-13T08:39:36.567 回答
1

BIO 连接器中最近的一个错误可能是这里的一个因素。

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

但是,如果您的应用程序在使用 DB 连接池的情况下也在 3 分钟内崩溃,则您的应用程序或 DB 处理代码可能有问题。

于 2012-06-04T15:10:57.663 回答
0

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

于 2012-11-14T17:27:42.333 回答