我正在使用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&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>
任何想法?
答案 0 :(得分:3)
您需要提供有关资源利用率的更多详细信息。但根据您的描述,您可能遇到HTTP线程池耗尽的问题。默认情况下(使用BIO连接器)Tomcat只能处理200个并发连接,AFAIK可以在待办事项队列中“保持”许多连接。
这意味着只能同时处理200个连接,另外100个连接将等待池。第301条连接将被拒绝或超时。
以下是要检查的内容:
Tomcat提供了有价值的jmx 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