Tomcat|线程爆满 网站响应慢? 400 报错
spring mvc项目 容器用的是tomcat 之前一直是默认的TOMCAT设置在跑 没出过问题(虽然理论上流量应该挺大的 但是没有反应过问题)
最近网站经常无响应 查看一下tomcat的线程满了(默认是200)所以找网上的相关资料自行进行了一些优化
打开线程池:
<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="500"
minSpareThreads="10"
maxIdleTime="60000"
/>
使用apr并且修改参数:
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
executor="tomcatThreadPool"
connectionTimeout="20000"
redirectPort="8443"
acceptCount="400"
enableLookups="false"
maxConnections="10000"
URIEncoding="GBK"
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla,traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/png,image/jpg,image/gif"
disableUploadTimeout="false"
connectionUploadTimeout="20000"
useBodyEncodingForURI="true"
/>
JAVA提升内存:
set JAVA_OPTS=%JAVA_OPTS% -server -Xms1024m -Xmx1024m(渣服务器 内存就2G 也没法多给)
加了probe做了一下参考检测:
线程数改过300 500 600 都是一开机都满了(busy满) 之前没设置排队 所以反应有页面无法打开 现在设置了排队 反应网站响应慢
想问一下 排除后台应用的问题(应用一直没动过) 单从tomcat来说(机器一直没动过 虽然渣性能 肯定有服务器的问题)还有优化的地方么 问题在哪?求教zrO
Tomcat 只是一个轻量级的容器,连接模型上还是采用了一请求,一线程的模型,这种模型最大的缺点是对延迟非常敏感,因为响应慢会导致新请求无可用连接可用。
但是,虽然理论上我们可以将配置中线程池设置到一个足够大的值,但是我们通常不建议这样做。更多的线程意味着更多的CPU切换时间。
解决这个问题的方案是 降低延迟,增加机器。
不应该一味的从线程池增大的方向去解决性能问题,如果查询较慢,或者有比较复杂的算法、递归等操作,增大线程池没有意义的。
应该首先找到性能瓶颈。我建议先把线程池降下来。
######从tomcat的管理页面知道大概都卡在什么地方 但是我自己对同样的地址压测却出不来线程阻塞的情况。。######换tomcat8
数据库数据量巨大?导致查询阻塞导致后来的线程都并发?
硬盘快挂了?
查下日志,看下10:30 - 10:40有什么操作。
这期间响应时间明显变慢了。这期间如果有长时间未响应线程,线程池中的
线程很容易被耗尽。
######不好查。。都是用户的操作###### compression="on" 这个关闭掉,让前面的Web服务器(Nginx / Apache)来做压缩。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。