文章目录

解决tomcat死掉JK无法连接故障

近日,发现网站jsp部分无法访问,或者访问速度极其缓慢。经过近二天的时间,问题得到了解决,现在把这解决步骤及思考方法详细的记录下来。其中也走了不少弯路。其结果也是让人无法琢磨!
发现问题时处理思路:

  1. 检查服务器是否正常连接。掉网、死机啥的。---SSH登录正常
  2. 检查负载情况,load是否超高,vmstat 检查资源占用率 —-只有mysql占少量资源,起初以为是mysql导致(检查mysql 状态后发现并没有锁表及DDL语句堆积,执行sql语句速度也很快。因此判断出不是mysql导致)
  3. 查看tcp连接状态。是不是并发太大被拖死了---其中ESTABLISHED大约有1000左右。TIME_WAIT CLOSE_WAIT 在40左右。看样子tomcat是被拖死了。并发这么大?
  4. 重启了tomcat 访问正常了。先观察一段时间。
  5. 查看分析日志,希望能从这里面找出一点蛛丝马迹来。

tomcat日志如下:

error:All threads (150) are currently busy, waiting. Increase maxThreads (150) or check the servlet status

提示我最大的线程数设置小了。那就按日志提示先加大点吧。

从网上找到如下一段:http://tech.163.com/05/0711/10/1OCH7J2000091589_3.html
web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。
那我先加到999再说。

修改server.xml

改后重启tomcat

漫长的等待! F5 刷新,结果还是让我很失望。tomcat还是不行。

登录服务器查看,情况与半小时前一样。
先重启了,保证页面能访问再说,上google也没有找到解决方案,继续查看日志,tomcat 就是些死掉的日志,没有其它的用处,这时查看到jk2的日志。发现了N多的问题。我想问题应该出在这。JK2无法连接到tomcat了。然后显示tomcat已经over了

日志如下:

[error] ajp_connection_tcp_get_message::jk_ajp_common.c (951): (ajp13) can't receive the response message from tomcat, network problems or tomcat (127.0.0.1:8009) is down (errno=104)
[error] ajp_get_reply::jk_ajp_common.c (1592): (ajp13) Tomcat is down or refused connection. No response has been sent to the client (yet)
Connecting to tomcat failed. Tomcat is probably not started or is listening on the wrong port

带着问题G了一下,有一些优化配置方案:

官网的如下:

worker.worker2.lbfactor=50
worker.worker2.cachesize=10
worker.worker2.cache_timeout=600
worker.worker2.socket_keepalive=1
worker.worker2.socket_timeout=300

别的文章可以不信,官网总得信呀。因此马上修改了

worker.properties 配置文件。

再一次重启tomcat

结果过了一段时间,问题又来了。tomcat还是down。如此再次修改worker.properties 配置文件,还是没有任何效果。
难道问题不是出在JK2?
此后就一直被此问题困扰。后来经理给了些信息。

#worker.ajp13.lbfactor=1
lbfactor  property is used when working with a load balancer worker, this is the load-balancing factor for the worker. We'll see more on this in the lb worker section.
#worker.loadbalancer.type=lb
#worker.loadbalancer.balance_workers=ajp13
# The loadbalancer (type lb) workers perform wighted round-robin
# load balancing with sticky sessions.
# Note:
#  ----> If a worker dies, the load balancer will check its state
#        once in a while. Until then all work is redirected to peer
#        workers.

也就是说先去掉tomcat集群配置选项,多余的选项一个都不要。免得造成轮循。
此后问题没有像之前那样频繁发生。相对稳定了许多。
目前tomcat已经稳定下来了。可量还是没有下来。因此还是需要做tomcat集群,以解决高端并发的问题。

文章目录