tomcat链接数过大,导致超时问题解决

为了确保服务不会被过多的http长连接压垮,我们需要对tomcat设定个最大连接数,超过这个连接数的请求会拒绝,让其负载到其它机器。达到保护自己的同时起到连接数负载均衡的作用。
tomcat参数调优
(1)不使用线程池的情况

后两个参数意义:
maxThreads:tomcat启动时候创建的最大线程数,即同时处理的任务个数,默认值为200
acceptCount:当tomcat启动时候的线程数达到最大时,接受排队的请求个数,默认值为100
(2)使用线程池的情况
第一步:打开共享的线程池

   

第二步 :在 Connector里指定使用共享线程池

注意,一旦使用了线程池,则其它的线程属性,比如 maxThreads等将被忽略

如何配置maxThreads、acceptCount才能使tomcat服务为最优

一般的服务器操作都包括量方面:1计算(主要消耗cpu),2等待(io、数据库等)
第一种极端情况,如果我们的操作是纯粹的计算,那么系统响应时间的主要限制就是cpu的运算能力,此时maxThreads应该尽量设的小,降低同一时间内争抢cpu的线程个数,可以提高计算效率,提高系统的整体处理能力。
第二种极端情况,如果我们的操作纯粹是IO或者数据库,那么响应时间的主要限制就变为等待外部资源,此时maxThreads应该尽量设的大,这样才能提高同时处理请求的个数,从而提高系统整体的处理能力。此情况下因为tomcat同时处理的请求量会比较大,所以需要关注一下tomcat的虚拟机内存设置和linux的open file限制

注意:其实多线程本身并不能提高cpu效率,线程过多反而会降低cpu效率。
当cpu核心数<线程数时,cpu就需要在多个线程直接来回切换,以保证每个线程都会获得cpu时间,即通常我们说的并发执行。 所以maxThreads的配置绝对不是越大越好。

最好的做法是:在不断测试的基础上,不断调整、优化,才能得到最合理的配置。
acceptCount的配置,我一般是设置的跟maxThreads一样大,这个值应该是主要根据应用的访问峰值与平均值来权衡配置的。

如何查看linux下的open file限制
命令:ulimit -a
查看open file的值

查看tomcat服务并发数

netstat -an | grep ESTABLISHED | wc -l

查看tomcat并发数,对比maxThreads的差额是多少
查看tomcat多少个进程

ps aux|grep tomcat |wc -l  

查看80端口下的链接数

netstat -ant|grep -i "80"|wc -l  

netstat -an会打印系统当前网络链接状态,而grep -i "80"是用来提取与80端口有关的连接的,wc -l进行连接数统计。最终返回的数字就是当前所有80端口的请求总数。

你可能感兴趣的:(tomcat问题排查)