近日,发现网站jsp部分无法访问,或者访问速度极其缓慢。经过近二天的时间,问题得到了解决,现在把这解决步骤及思考方法详细的记录下来。其中也走了不少弯路。其结果也是让人无法琢磨!网站简单架构:squid-apache--php apache+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 提示我最大的线程数设置小了。那就按日志提示先加大点吧。从网上找到如下一段:[url]http://tech.163.com/05/0711/10/1OCH7J2000091589_3.html[/url]web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。那我先加到999再说。修改server.xml <Connector port="80" maxThreads="999" minSpareThreads="25" maxSpareThreads="999" enableLookups="false" redirectPort="8443" acceptCount="999" debug="0" connectionTimeout="20000" disableUploadTimeout="true" />改后重启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=50worker.worker2.cachesize=10worker.worker2.cache_timeout=600worker.worker2.socket_keepalive=1worker.worker2.socket_timeout=300 别的文章可以不信,官网总得信呀。因此马上修改了worker.properties 配置文件。再一次重启tomcat结果过了一段时间,问题又来了。tomcat还是down。如此再次修改worker.properties 配置文件,还是没有任何效果。难道问题不是出在JK2? 此后就一直被此问题困扰。后来经理给了些信息。#worker.ajp13.lbfactor=1lbfactor 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集群,以解决高端并发的问题。
本文转自守住每一天51CTO博客,原文链接:http://blog.51cto.com/liuyu/112271,如需转载请自行联系原作者