Tomcat|线程爆满 网站响应慢

fancyguys 发布于 2016/04/08 12:21
阅读 3K+
收藏 3

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

加载中
0
总舵主
总舵主

  Tomcat 只是一个轻量级的容器,连接模型上还是采用了一请求,一线程的模型,这种模型最大的缺点是对延迟非常敏感,因为响应慢会导致新请求无可用连接可用。    
  但是,虽然理论上我们可以将配置中线程池设置到一个足够大的值,但是我们通常不建议这样做。更多的线程意味着更多的CPU切换时间。
  解决这个问题的方案是 降低延迟,增加机器。

f
fancyguys
我也想换T_T
0
亭舸翁
亭舸翁
这是后台资源响应慢吧,例如数据库或者本地文件IO。可以分析看下各线程都在等待什么资源
f
fancyguys
大概知道卡在什么地方 但是对同样的地址压测却不会出现线程满的情况。。
0
阿采
阿采
可以看看最近网站上是不是有些会被请求的资源随着时间的增长而爆满了,比如数据库,文件目录等等,首先要找出为什么不卡现在卡的原因再做针对性的优化。
f
fancyguys
大概知道卡在什么地方 但是对同样的地址压测却不会出现线程满的情况。。。
0
开源狂人
开源狂人
达到极限了,你还是试一下resin,单机性能要高于tomcat
f
fancyguys
环境上暂时没法换中间件。。诶
0
Nox
Nox

不应该一味的从线程池增大的方向去解决性能问题,如果查询较慢,或者有比较复杂的算法、递归等操作,增大线程池没有意义的。

应该首先找到性能瓶颈。我建议先把线程池降下来。

f
fancyguys
从tomcat的管理页面知道大概都卡在什么地方 但是我自己对同样的地址压测却出不来线程阻塞的情况。。
0
loyal
loyal

换tomcat8

数据库数据量巨大?导致查询阻塞导致后来的线程都并发?

硬盘快挂了?


f
fancyguys
tomcat7和8性能差很多么??
0
公孙二狗
公孙二狗
nginx 前端控制最大连接数
f
fancyguys
是想上nginx来着 但是目前没有条件 以及控制了最大连接数如果满了不是一样么= =
0
12叔
12叔
每个请求响应要多久 线程阻塞的话就没办法了  线程越多 切换越慢 
0
-赵本山-
-赵本山-

查下日志,看下10:30 - 10:40有什么操作。

这期间响应时间明显变慢了。这期间如果有长时间未响应线程,线程池中的

线程很容易被耗尽。

f
fancyguys
不好查。。都是用户的操作
0
zigzagroad
zigzagroad
compression="on" 这个关闭掉,让前面的Web服务器(Nginx / Apache)来做压缩。
zigzagroad
zigzagroad
那也关掉,压缩也是比较占计算资源的。
f
fancyguys
前面没有WEB服务器= =
返回顶部
顶部