tomcat 大并发报错以及解决方案!

来源:互联网 发布:淘宝网夏季竹凉席坐垫 编辑:程序博客网 时间:2024/05/29 13:50

今天在windows下的tomcat启动运行中发现页面经常报503的错误,windows中tomcat的运行日志是在控制台显示的,发现在503错误后,控制台一直卡死状态,


鼠标右键点击才能继续运行,接着日志显示错误如下:

Maximum number of threads (200) created for connector with address null and port 84


原来是最大线程错误,解决方案如下:

使用线程池,用较少的线程处理较多的访问,可以提高tomcat处理请求的能力。使用方式:
首先。打开/conf/server.xml,增加
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"      
        maxThreads="500" minSpareThreads="20" maxIdleTime="60000" /> 
 
最大线程500(一般服务器足以),最小空闲线程数20,线程最大空闲时间60秒。

重要参数说明:

name:共享线程池的名字。这是Connector为了共享线程池要引用的名字,该名字必须唯一。默认值:None;

namePrefix:在JVM上,每个运行线程都可以有一个name 字符串。这一属性为线程池中每个线程的name字符串设置了一个前缀,Tomcat将把线程号追加到这一前缀的后面。默认值:tomcat-exec-;

maxThreads:该线程池可以容纳的最大线程数。默认值:200;

maxIdleTime:在Tomcat关闭一个空闲线程之前,允许空闲线程持续的时间(以毫秒为单位)。只有当前活跃的线程数大于minSpareThread的值,才会关闭空闲线程。默认值:60000(一分钟)。

minSpareThreads:Tomcat应该始终打开的最小不活跃线程数。默认值:25。

threadPriority:线程的等级。默认是Thread.NORM_PRIORITY



然后,修改<Connector ...>节点,增加executor属性,如:
<Connector executor="tomcatThreadPool"      
               port="84" protocol="HTTP/1.1"      
               connectionTimeout="60000"    
               keepAliveTimeout="15000"    
               maxKeepAliveRequests="1"    
               redirectPort="8043"    
               ....../> 

重要参数说明:
connectionTimeout - 网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
keepAliveTimeout - 长连接最大保持时间(毫秒)。此处为15秒。
maxKeepAliveRequests - 最大长连接个数(1表示禁用,-1表示不限制个数,默认100个。一般设置在100~200之间)

原创粉丝点击