1 连接数参数介绍

回顾一下Tomcat处理请求的过程:在accept队列中接收连接(当客户端向服务器发送请求时,如果客户端与OS完成三次握手建立了连接,则OS将该连接放入accept队列);在连接中获取请求的数据,生成request;调用servlet容器处理请求;返回response。 对应的,Connector中的几个参数功能如下:

1.1 acceptCount

accept队列的长度;当accept队列中连接的个数达到acceptCount时,队列满,进来的请求一律被拒绝,默认值是100(跟tomcat版本有关系)

1.2 maxConnections

Tomcat在任意时刻接收和处理的最大连接数。当Tomcat接收的连接数达到maxConnections时,Acceptor线程不会读取accept队列中的连接;这时accept队列中的线程会一直阻塞着,直到Tomcat接收的连接数小于maxConnections。如果设置为-1,则连接数不受限制。默认值与连接器使用的协议有关:NIO的默认值是10000,APR/native的默认值是8192,而BIO的默认值为maxThreads(如果配置了Executor,则默认值是Executor的maxThreads)。在windows下,APR/native的maxConnections值会自动调整为设置值以下最大的1024的整数倍;如设置为2000,则最大值实际是1024。

1.3 maxThreads

请求处理线程的最大数量。默认值是200(Tomcat7和8都是的)。如果该Connector绑定了Executor,这个值会被忽略,因为该Connector将使用绑定的Executor,而不是内置的线程池来执行任务。maxThreads规定的是最大的线程数目,并不是实际running的CPU数量;实际上,maxThreads的大小比CPU核心数量要大得多。这是因为,处理请求的线程真正用于计算的时间可能很少,大多数时间可能在阻塞,如等待数据库返回数据、等待硬盘读写数据等。因此,在某一时刻,只有少数的线程真正的在使用物理CPU,大多数线程都在等待;因此线程数远大于物理核心数才是合理的。换句话说,Tomcat通过使用比CPU核心数量多得多的线程数,可以使CPU忙碌起来,大大提高CPU的利用率。

2 参数配置

为了确保服务不会被过多的http长连接压垮,我们需要对tomcat设定个最大连接数,超过这个连接数的请求会拒绝,让其负载到其它机器,达到保护自己的同时起到连接数负载均衡的作用。tomcat的并发数由以下两个参数决定:

maxThreads:tomcat启动的最大线程数,即同时处理的任务个数,默认值为200

acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100

这两个值如何起作用,请看下面三种情况

情况1:接受一个请求,此时tomcat起动的线程数没有到达maxThreads,tomcat会起动一个线程来处理此请求。

情况2:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,tomcat会把此请求放入等待队列,等待空闲线程。

情况3:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,等待队列中的请求个数也达到了acceptCount,此时tomcat会直接拒绝此次请求,返回connection refused

默认情况下,tomcat最大连接数和最大并发数默认是10000和200

同时加上maxConnections

原来tomcat最大连接数取决于maxConnections这个值加上acceptCount这个值,在连接数达到了maxConenctions之后,tomcat仍会保持住连接,但是不处理,等待其它请求处理完毕之后才会处理这个请求。tomcat的最大连接数参数是maxConnections,这个值表示最多可以有多少个socket连接到tomcat上。BIO模式下默认最大连接数是它的最大线程数(缺省是200),NIO模式下默认是10000,APR模式则是8192(windows上则是低于或等于maxConnections的1024的倍数)。如果设置为-1则表示不限制。

3 总结

3.1 tomcat能支持最大连接数由maxConnections加上acceptCount来决定。同时maxThreads如何设定?

一般的服务器操作都包括两方面:1计算(主要消耗cpu),2等待(io、数据库等)

第一种极端情况,如果我们的操作是纯粹的计算,那么系统响应时间的主要限制就是cpu的运算能力,此时maxThreads应该尽量设的小,降低同一时间内争抢cpu的线程个数,可以提高计算效率,提高系统的整体处理能力。

第二种极端情况,如果我们的操作纯粹是IO或者数据库,那么响应时间的主要限制就变为等待外部资源,此时maxThreads应该尽量设的大,这样才能提高同时处理请求的个数,从而提高系统整体的处理能力。此情况下因为tomcat同时处理的请求量会比较大,所以需要关注一下tomcat的虚拟机内 存设置和linux的open file限制。

现实应用中,我们的操作都会包含以上两种类型(计算、等待),所以maxThreads的配置并没有一个最优值,一定要根据具体情况来配置。

最好的做法是:在不断测试的基础上,不断调整、优化,才能得到最合理的配置。

acceptCount的配置,我一般是设置的跟maxThreads一样大,这个值应该是主要根据应用的访问峰值与平均值来权衡配置的。

如果设的较小,可以保证接受的请求较快相应,但是超出的请求可能就直接被拒绝

如果设的较大,可能就会出现大量的请求超时的情况,因为我们系统的处理能力是一定的

3.2 linux下使用tomcat命令备注:

3.2.1 linux下查看apache当前并发访问数:

netstat -an | grep ESTABLISHED | wc -l  

对比httpd.conf中MaxClients的数字差距多少。

3.2.2 查看有多少个进程数:

ps aux|grep httpd|wc -l  

3.2.3 可以使用如下参数查看数据

ps -ef | grep httpd | wc -l
1388  

统计httpd进程数,每个请求会启动一个进程,使用于Apache服务器。

1388表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整。

#netstat -nat|grep -i "80"|wc -l

  4341

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

最终返回的数字就是当前所有80端口的请求总数。

netstat -na|grep ESTABLISHED|wc -l
376

netstat -an会打印系统当前网络链接状态,而grep ESTABLISHED 提取出已建立连接的信息。 然后wc -l统计。

最终返回的数字就是当前所有80端口的已建立连接的总数。

Bat代码

netstat -nat||grep ESTABLISHED|wc

可查看所有建立连接的详细记录

查看Apache的并发请求数及其TCP连接状态:

Linux命令:

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

返回结果示例:

  LAST_ACK 5

  SYN_RECV 30

  ESTABLISHED 1597

  FIN_WAIT1 51

  FIN_WAIT2 504

  TIME_WAIT 1057

其中的

  SYN_RECV :表示正在等待处理的请求数;

  ESTABLISHED :表示正常数据传输状态;

  TIME_WAIT :表示处理完毕,等待超时结束的请求数。

Tomcat配置之连接数设置相关推荐

  1. jrebel linux tomcat,JRebel + Tomcat 配置

    此下使用jrebel方式为不使用eclipse plugins方式,是直接用jvm vm arguments参数形式进行配置. 1. 下载 JRebel.jar.jrebel.lic(官网试用) 2. ...

  2. tomcat配置重定向_在Tomcat上配置SSL以及从HTTP到HTTPS的设置自动重定向的步骤

    tomcat配置重定向 Secured Socket Layer (SSL) is the cryptography protocol to provide message security over ...

  3. Nginx+tomcat配置集群

    2019独角兽企业重金招聘Python工程师标准>>> 开发的应用采用F5负载均衡交换机,F5将请求转发给5台hp unix服务器,每台服务器有多个webserver实例,对外提供w ...

  4. 图文解说:Nginx+tomcat配置集群负载均衡

    图文解说:Nginx+tomcat配置集群负载均衡 博客分类: appserver nginxTomcatUbuntuLinux网络应用  作者:niumd Blog:http://ari.iteye ...

  5. bat窗口大小设置_Tomcat的JVM和连接数设置

    Windows环境下修改"%TOMCAT_HOME%bincatalina.bat"文件,在文件开头增加如下设置: set JAVA_OPTS=-Xms256m -Xmx512m ...

  6. Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

    2019独角兽企业重金招聘Python工程师标准>>> Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta ...

  7. Tomcat配置与调优

    Tomcat集群 Session复制配置方法 在Tomcat的conf/server.xml 配置如下: <Cluster className="org.apache.catalina ...

  8. tomcat配置详解

    ​ server.xml配置# server.xml是Tomcat的主配置文件,可以对Service, Connector, Engine, Realm, Valve, Hosts等主组件进行相关配置 ...

  9. tomcat 默认150连接数怎么支持几万大并发的?集群?

    刷脉脉看到这个问题,不错的问题值得讨论. 之前做过高并发场景下的网关应用,也针对于jetty.netty.jvm进行过参数配置与调优,对于下面几个同学的讨论分析下. 程序猿关平 怎么可能150连接数, ...

最新文章

  1. java 的回调函数
  2. java spring boot缓存_Springboot对缓存的支持
  3. FreeBSD5.3下安装Apache+PHP+MySQL+Tomcat
  4. 纯C++版的Faster-Rcnn(通过caffe自定义RPN层实现)
  5. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-2
  6. SAP Spartacus autofocus Directive的失败的单元测试 - 2021年1月13日 1.1
  7. Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级)
  8. MYSQL 表 部分数据导出、导入
  9. Python 处理各种编码的字符串
  10. Ubuntu下安装NetBeans步骤和相关问题的解决方法
  11. ASP.NET MVC 3.0学习系列文章(开始学习MVC)
  12. 步步为营 .NET三层架构解析 五、DAL与IDAL的设计
  13. volatile c语言_C语言系列文章之volatile
  14. 菜鸟电子面单,自定义区设置方法
  15. python正则表达式与re模块
  16. 初中计算机室教学计划,初中信息技术教学计划
  17. java-net-php-python-2020SSM面向大学生的课程演示录像计算机毕业设计程序
  18. explain的用法
  19. 二次开发是什么意思_为什么说初学者都需要一台云服务器
  20. “多视角交叉认知----《发现的乐趣》,TED演讲-数学是理解万物之源,徐冰《创造力从哪里来》”主题作文

热门文章

  1. 拜托!面试请不要再问我Spring Cloud底层原理!
  2. Xshell安装rz/sz命令
  3. 基于 React hooks + Typescript + Cesium 实现日照分析并封装对应 SunShineAnalysis 类
  4. android 获取微信计步数量,微信运动步数是怎样计算的?终于有人研究出来了!
  5. CAN分布式控制系统的优势和典型应用
  6. java三角形剪角_完成撤销交易后,作废的银行汇票四联剪角,加盖“作废”戳记。...
  7. 中计播客 | 戊戌年的第一篇播客,价值6000亿~
  8. 【node.js+html】无聊在家写一个在线客服聊天系统
  9. 数据分析之AB testing实战(附Python代码)
  10. oracle的日志在哪找,oracle日志文件路径怎么找