并发量的影响因素
1、数据库,这是web项目中最常见的瓶颈,解决方法一般都是通过cache
2、远程接口调用,解决方法是选择高性能的RPC框架,如dubbo+ZK等,使用长连接代替短连接
3、容器,容器本身的并发量是有上限的,所以大型系统都是分布式的
4、业务逻辑,复杂的业务逻辑肯定会花费更多的时间去处理,可以采用异步或多线程的方式解决
5.其他,如JVM调优,网络带宽,CDN加速等等很多其他因素
其中的容器就包括tomcat,tomcat是一个解压即可用的中间件,虽然默认配置可以使大多数正常运行,但是并不能发挥出服务最佳的性能。
本文主要记录Tomcat 处理能力影响比较大的几个方面:
1、tomcat的运行模式,选对一个合适的运行模式会对tomcat的处理能力有质的影响
2、tomcat连接器中几个对并发量影响比较大的参数设置,类似超时时间,文件头大小等设置本篇不涉及。
Tomcat的配置
在tomcat配置文件server.xml中的配置中,和连接数相关的参数有:
minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100
enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。
web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。
maxProcessors
*这个值表示最多可以有多少个socket连接到tomcat上。NIO模式下默认是10000,对于BIO,默认的是maxThreads的值,APR /native的默认值是8192。*
本参数与maxThreads是不同的,maxThreads是woker线程并发处理请求的最大数。也就是虽然client的socket连接上了,但是可能都在tomcat的task queue里头,等待worker线程处理返回响应。
maxConnections配置方法
maxConnections = "1000"
acceptCount
*当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100*
这个值应该是主要根据应用的访问峰值与平均值来权衡配置的,通常可以使用默认值100或者设置为跟maxThreads相同
如果设的较小,可以保证接受的请求较快相应,但是超出的请求可能就直接被拒绝
如果设的较大,可能就会出现大量的请求超时的情况,因为我们系统的处理能力是一定的
更改配置文件server.conf里面的下面部分
1 | <Connector port="8080" protocol="HTTP/1.1" |