Tomcat|线程爆满 网站响应慢
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(20)
compression="on" 这个关闭掉,让前面的Web服务器(Nginx / Apache)来做压缩。
那也关掉,压缩也是比较占计算资源的。
前面没有WEB服务器= =
不好查。。都是用户的操作
查下日志,看下10:30 - 10:40有什么操作。
这期间响应时间明显变慢了。这期间如果有长时间未响应线程,线程池中的
线程很容易被耗尽。
每个请求响应要多久 线程阻塞的话就没办法了 线程越多 切换越慢
是想上nginx来着 但是目前没有条件 以及控制了最大连接数如果满了不是一样么= =
nginx 前端控制最大连接数
tomcat7和8性能差很多么??
换tomcat8
数据库数据量巨大?导致查询阻塞导致后来的线程都并发?
硬盘快挂了?
从tomcat的管理页面知道大概都卡在什么地方 但是我自己对同样的地址压测却出不来线程阻塞的情况。。
不应该一味的从线程池增大的方向去解决性能问题,如果查询较慢,或者有比较复杂的算法、递归等操作,增大线程池没有意义的。
应该首先找到性能瓶颈。我建议先把线程池降下来。
环境上暂时没法换中间件。。诶
达到极限了,你还是试一下resin,单机性能要高于tomcat
大概知道卡在什么地方 但是对同样的地址压测却不会出现线程满的情况。。。
可以看看最近网站上是不是有些会被请求的资源随着时间的增长而爆满了,比如数据库,文件目录等等,首先要找出为什么不卡现在卡的原因再做针对性的优化。
大概知道卡在什么地方 但是对同样的地址压测却不会出现线程满的情况。。
这是后台资源响应慢吧,例如数据库或者本地文件IO。可以分析看下各线程都在等待什么资源
我也想换T_T
Tomcat 只是一个轻量级的容器,连接模型上还是采用了一请求,一线程的模型,这种模型最大的缺点是对延迟非常敏感,因为响应慢会导致新请求无可用连接可用。
但是,虽然理论上我们可以将配置中线程池设置到一个足够大的值,但是我们通常不建议这样做。更多的线程意味着更多的CPU切换时间。
解决这个问题的方案是 降低延迟,增加机器。