引言
这段时间折腾了哈Java web应用的压力测试,部署容器是tomcat 7。期间学到了蛮多散碎的知识点,及时梳理总结,构建良好且易理解的知识架构把它们组织起来,以备忘。
对web应用开发者来说,我们很关心应用可同时处理的请求数,以及响应时间。应用本身和它运行在其中的web容器是两个很重要的影响因素。
对tomcat来说,每一个进来的请求(request)都需要一个线程,直到该请求结束。如果同时进来的请求多于当前可用的请求处理线程数,额外的线程就会被创建,直到到达配置的最大线程数(maxThreads属性值)。如果仍就同时接收到更多请求,这些来不及处理的请求就会在Connector创建的ServerSocket中堆积起来,直到到达最大的配置值(acceptCount属性值)。至此,任何再来的请求将会收到connection refused错误,直到有可用的资源来处理它们。
分析、梳理、组织
这里我们关心的是tomcat能同时处理的请求数和请求响应时间,显然Connector元素的maxThreads和acceptCount属性对其有直接的影响。无论acceptCount值为多少,maxThreads直接决定了实际可同时处理的请求数。而不管maxThreads如何,acceptCount则决定了有多少请求可等待处理。然而,不管是可立即处理请求还是需要放入等待区,都需要tomcat先接受该请求(即接受client的连接请求,建立socketchannel),那么tomcat同时可建立的连接数(maxConnections属性值)也会影响可同时处理的请求数。
我们可把tomcat想象成一家医院,你来到医院大厅挂号看病,如果人家接受了,就相当于client和server建立socket连接了。接着你来到相应的科室,科室里每位医生都有一间诊室,这就相当于处理请求的线程;如果所有诊室都有病人,科室的调度护士会让你在科室小厅中耐心等待,直到他们通知你去几号诊室就诊;如果有空闲医生,你就可以立即就诊。
有的病人到医院很仓促,结果轮到他挂号或者就诊了,他还在包里翻找病例本和医保卡,如果超过了护士或医生心里可承受的等待时间,他们就会让病人到旁边找去,先服务下位。这种情形跟Connector元素的connectionTimeout属性所起的作用很相像。如果当前连接器(Connector)在接受连接后,等待了指定的时间但仍未接收到requestURI line,就会抛出超时异常。
知识点收集
tomcat 7 的配置参考文档对相关属性已经描述的很详细了,这里把它们收集到一起:
protocol
Sets the protocol to handle incoming traffic. The default valueis HTTP/1.1 which uses an auto-switching mechanism to select either a blockingJava based connector or an APR/native based connector. If the PATH (Windows) orLD_LIBRARY_PATH (on most unix systems) environment variables contain the Tomcatnative library, the APR/native connector will be used. If the native librarycannot be found, the blocking java based connector will be used. Note that theAPR/native connector has different settings for HTTPS than the Javaconnectors.
To use an explicit protocol rather than rely on the auto-switching mechanismdescribed above, the following values may be used:
org.apache.coyote.http11.Http11Protocol- blocking Java connector
org.apache.coyote.http11.Http11NioProtocol- non blocking Java connector
org.apache.coyote.http11.Http11AprProtocol- the APR/native connector.
Custom implementations may also be used.
Take a look at our Connector Comparison chart. The configuration for both Javaconnectors is identical, for http and https.
For more information on the APR connector and APR specific SSL settings pleasevisit the APR documentation
maxThreads
The maximum number of request processing threads to be createdby this Connector, which therefore determines the maximum number ofsimultaneous requests that can be handled. If not specified, this attribute isset to 200. If an executor is associated with this connector, this attribute isignored as the connector will execute tasks using the executor rather than aninternal thread pool.
acceptCount
The maximum queue length for incoming connection requests whenall possible request processing threads are in use. Any requests received whenthe queue is full will be refused. The default value is 100.
maxConnections
The maximum number of connections that the server will acceptand process at any given time. When this number has beenreached, the server will accept, but not process, one further connection. Thisadditional connection be blocked until the number of connections beingprocessed falls below maxConnections at which point the server will startaccepting and processing new connections again. Note that once the limit hasbeen reached, the operating system may still accept connections based on theacceptCount setting. Thedefault value varies by connector type. For BIO the default is the value of maxThreads unless an Executor isused in which case the default will be the value of maxThreads from theexecutor. For NIO the default is 10000. For APR/native, the default is 8192.
Note that for APR/native on Windows, the configured value will be reduced tothe highest multiple of 1024 that is less than or equal to maxConnections. Thisis done for performance reasons.
If set to a value of -1, the maxConnections feature is disabled and connectionsare not counted.
connectionTimeout
The number of milliseconds this Connector will wait,after accepting a connection, for the request URI lineto be presented. Use a value of -1 to indicate no (i.e.infinite) timeout. The default value is 60000 (i.e. 60 seconds) but note thatthe standard server.xml that ships with Tomcat sets this to 20000 (i.e. 20seconds). Unless disableUploadTimeout is set to false, this timeout willalso be used when reading the request body (if any).
进一步分析
tomcat的http connector有三种:bio、nio、apr。从上面的属性描述中可以看出对于不同的connector实现,相同的属性可能会有不同的默认值和不同的处理策略,所以在调整配置前,要先弄清楚各种实现之间的不同,以及当前部署容器使用的是哪种connector。
查阅Tomcat7 http connector 配置文档Connector Comparison部分便可获知各种connector实现间的差异。
怎样才能知道容器使用的是何种connector实现?启动tomcat后,访问Server Status Page,看到如下信息即可知道使用的是何种connector:
我的OS是windows,所以tomcat默认使用的是aprconnector。在Linux上,默认使用的是bio connector。与nio相比,bio性能较低。将<TOMCAT_HOME>/conf/server.xml中的如下配置片段:
<Connectorport="8080"protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改为:
<Connectorport="8080"protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
就可将http connector切换至nio了。更多细节请参考修改Tomcat Connector运行模式,优化Tomcat运行性能
官网说明:http://tomcat.apache.org/tomcat-7.0-doc/config/http.html
一、最大线程数的设置
Tomcat的server.xml中连接器设置如下
<Connectorport="8080" maxThreads="150"minSpareThreads="25" maxSpareThreads="75" enableLookups="false"redirectPort="8443" acceptCount="100" debug="0"connectionTimeout="20000" disableUploadTimeout="true"/>
tomcat在配置时设置最大线程数,当前线程数超过这个数值时会出错,那么有没有办法捕获到这个错误,从而在client端显示出错信息?
2. 如何加大tomcat连接数
在tomcat配置文件server.xml中的<Connector />配置中,和连接数相关的参数有:
minProcessors:最小空闲连接线程数,用于提高系统处理性能,默认值为10
maxProcessors:最大连接线程数,即:并发处理的最大请求数,默认值为75
acceptCount:允许的最大连接数,应大于等于maxProcessors,默认值为100
enableLookups:是否反查域名,取值为:true或false。为了提高处理能力,应设置为false
connectionTimeout:网络连接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。
其中和最大连接数相关的参数为maxProcessors和acceptCount。如果要加大并发连接数,应同时加大这两个参数。
web server允许的最大连接数还受制于操作系统的内核参数设置,通常Windows是2000个左右,linux是1000个左右。tomcat5中的配置示例:
<Connector port="8080"
maxThreads="150" minSpareThreads="25"maxSpareThreads="75"
enableLookups="false" redirectPort="8443"acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" />
对于其他端口的侦听配置,以此类推。
3. tomcat中如何禁止列目录下的文件
在{tomcat_home}/conf/web.xml中,把listings参数设置成false即可,如下:
1. <init-param>
2. <param-name>listings</param-name>
3. <param-value>false</param-value>
4. </init-param>
4.如何加大tomcat可以使用的内存
tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,需要调大。
Unix下,在文件{tomcat_home}/bin/catalina.sh的前面,增加如下设置:
JAVA_OPTS='-Xms【初始化内存大小】 -Xmx【可以使用的最大内存】'
需要把这个两个参数值调大。例如:
JAVA_OPTS='-Xms256m -Xmx512m'
表示初始化内存为256MB,可以使用的最大内存为512MB
http://blog.csdn.net/salonzhou/article/details/50699696
相关推荐
### Tomcat7配置详解 #### 一、安装与配置JDK1.7 在开始配置Tomcat7之前,首先需要确保计算机上已经正确安装了Java Development Kit (JDK) 1.7。JDK是运行Tomcat服务器所必需的基础环境。 1. **下载并安装JDK1.7*...
描述中提到的“在项目里的属性,找到tomcat配置,直接将包导入即可使用”,这可能是指在IDE(如Eclipse或IntelliJ IDEA)中配置Tomcat的过程。在IDE中,你可以添加新的Server运行配置,选择Tomcat 7,指定安装位置,...
记得设置好`JAVA_HOME`环境变量,指向JDK的安装路径,这在后续的Tomcat配置中至关重要。 接下来,我们将进入Tomcat 7的配置过程。首先,下载Tomcat 7的安装包,可以从Apache官方网站获取。解压到你希望安装的位置,...
1) Introduction tomcat总体简要介绍 2) Setup 介绍如何安装tomcat 3) First webapp 第一...7) Security Manager 介绍怎么配置和使用Security Manager(安全管理器) 8) JNDI Resources 介绍JNDI概念及如何定
【标题】:“Tomcat6与Tomcat7配置详解” 【描述】:“本文档将详细介绍如何在JDK6和JDK7环境下配置Tomcat6.0和Tomcat7.0服务器,包括环境变量设置、服务器启动及Web应用创建。” 【标签】:“Tomcat6配置” ...
Tomcat7 的配置主要包括两个方面:一是配置 Tomcat7 的 JVM 参数,二是配置 Tomcat7 的连接数参数。 (一)配置 Tomcat7 的 JVM 参数 Tomcat7 的 JVM 参数配置主要是通过修改 catalina.sh 文件来实现的。具体来说...
在这个配置过程中,我们将关注如何在Windows 10环境下设置kie drools的web应用,并将其部署到Apache Tomcat 7服务器上。 首先,kie drools的核心功能是基于Drools Expert和Drools Flow,它允许开发者编写、测试和...
在构建高性能、高可用性的Web应用系统时,配置Tomcat集群和负载均衡是至关重要的步骤。本主题将详细讲解如何利用Tomcat 7、Nginx和Memcached来实现这一目标,同时关注session共享和Kryo序列化技术。 首先,Tomcat 7...
### Tomcat 7 配置方法详解 #### 一、JDK 1.7 的配置步骤 在配置 Tomcat 7 之前,首先确保 JDK 1.7 已正确安装并配置好环境变量,这对于 Tomcat 的运行至关重要。以下是详细的配置步骤: 1. **安装 JDK 1.7**:...
在tomcat上配置https证书操作步骤,小程序及公众号程序开发需求https服务。
【标题】:“Tomcat及其配置文件” 在Java Web开发领域,Tomcat是一个广泛使用的开源应用服务器,它专注于Servlet和JSP的应用。Tomcat是Apache软件基金会的Jakarta项目的一部分,作为一个轻量级的Web服务器和...
Tomcat7 集群配置 Tomcat7 集群配置是指将多个 Tomcat 服务器组合成一个集群,以提高系统的可用性和可扩展性。在这个配置中,Session 复制机制是一个非常重要的部分,它可以确保在集群中的每个节点都可以访问到同一...
【标题】:“Windows环境下安装与配置Tomcat 7详解” 【描述】:在Windows操作系统上部署和管理Apache Tomcat 7是一项常见的任务,尤其对于Java Web应用开发者来说至关重要。Tomcat 7是一款轻量级的Java Servlet...
针对计算机初学者,eclisp配置tomcat7及jdk1.7的运行。很多同学在刚接触时,对一些软件很不熟悉。
在配置 Tomcat 服务器之前,需要下载 Tomcat 7 的 zip 版本并解压。用户可以访问 Apache Tomcat 的官方网站下载最新版本的 Tomcat 服务器。 二、在 IntelliJ IDEA 中配置 Tomcat 7 配置 Tomcat 服务器需要在 ...
### Apache Tomcat 7 配置详解 #### 一、配置 JDK 为了使 Apache Tomcat 7 正常运行,首先需要配置 Java 开发工具包 (JDK)。以下是具体的步骤: 1. **下载 JDK**: - 访问 Oracle 官方网站或通过其他可靠来源...
本文将深入探讨"Tomcat+JSP经典配置"的相关知识点,帮助初学者更好地理解和掌握这两项技术。 首先,我们需要在本地环境中安装Tomcat。下载最新版本的Tomcat压缩包,解压到指定目录,例如`C:\Tomcat`。配置环境变量`...
针对计算机初学者,eclisp配置tomcat7及jdk1.7的运行。很多同学在刚接触时,对一些软件很不熟悉。