在对其进行并发测试时,基本上30个USER上去就当机了,还要修改默认链接数设置:如下红色四行TOMCAT6中好相没有,手工加上就能够了,基本上能够解决链接数过大引发的死机。具体数值可跟据实际状况设置java
<Connector port="80" protocol="HTTP/1.1" maxThreads="600" minSpareThreads="100" maxSpareThreads="500" acceptCount="700" connectionTimeout="20000" redirectPort="8443" />linux
maxThreads="600" ///最大线程数web
minSpareThreads="100"///初始化时建立的线程数spring
maxSpareThreads="500"///一旦建立的线程超过这个值,Tomcat就会关闭再也不须要的socket线程。sql
acceptCount="700"//指定当全部可使用的处理请求的线程数都被使用时,能够放处处理队列中的请求数,超过这个数的请求将不予处 理 Tomcat6使用安装版本进行安装后,使用内存的调整没法利用修改启动文件的方式进行,但按缺省方式启动后若是启动的应用较多的话Tomcat常常会因 为内存不足而失去响应,这个时候必须人工调整内存参数: 1.“开始”--“Apache Tomcat 6”--“Configure Tomcat”数据库
2.选择Java标签,在“Initial memory pool(初始内存)”和“Maximum memory pool(最大内存)”中输入你须要的内存参数便可 与内存相关的tomcat错误处理: 1.java.lang.OutOfMemoryError:这个错误是由于tomcat JVM的Permanent Generation space(内存的永久保存区域)不足引发的,这个区域是JVM用于用于存放Class和Meta的信息的内存区域,GC(Garbage Collection)不会在主程序运行期对 PermGen space进行清理,因此若是你的应用中有不少CLASS的话,就极可能出现PermGen space错误, 这种错误常见在web服务器对JSP进行pre compile的时候。若是你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了,症状是tomcat运行一段时间后失去反应,服务中tomcat服务正常,重启 tomcat服务后网站又正常响应了。解决方案是人工调整确认大小设置,使用regedit修改注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat6\Parameters\Java中的 Options参数,在后面增长一下数据: -XX:PermSize=64M
-XX:MaxPermSize=128mapache
2.java.lang.OutOfMemoryError: Java heap space Heap size 设置 JVM堆的设置是指java程序运行过程当中JVM能够调配使用的内存空间的设置.JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。能够利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap size 的大小是Young Generation 和Tenured Generaion 之和。windows
提示:在JVM中若是98%的时间是用于GC且可用的Heap size 不足2%的时候将抛出此异常信息。tomcat
提示:Heap Size 最大不要超过可用物理内存的80%,通常的要将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值。使用前面所说的方法进行调整便可服务器
=================== Tomcat内存、链接数等性能参数设置 默认参数不适合生产环境使用,所以须要修改一些参数
一、修改启动时内存参数、并指定JVM时区(在windows server 2008 下时间少了8个小时): 在Tomcat上运行j2ee项目代码时,常常会出现内存溢出的状况,解决办法是在系统参数中增长系统参数: window下, 在catalina.bat最前面: set JAVA_OPTS=-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m 必定加在catalina.bat最前面。 linux下,在catalina.sh最前面增长: JAVA_OPTS="-XX:PermSize=64M -XX:MaxPermSize=128m -Xms512m -Xmx1024m -Duser.timezone=Asia/Shanghai" 注意:先后两者区别,有无set,有无双引号。
二、线程池配置(Tomcat6下) 使用线程池,用较少的线程处理较多的访问,能够提升tomcat处理请求的能力。使用方式: 首先。打开/conf/server.xml,增长 <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="500" minSpareThreads="20" maxIdleTime="60000" /> 最大线程500(通常服务器足以),最小空闲线程数20,线程最大空闲时间60秒。 而后,修改<Connector ...>节点,增长executor属性,如:
<Connector executor="tomcatThreadPool" port="80" protocol="HTTP/1.1" connectionTimeout="60000" keepAliveTimeout="15000" maxKeepAliveRequests="1" redirectPort="443" ....../>
注意:能够多个connector公用1个线程池。
三、调整链接相关Connector的参数:
<Connector executor="tomcatThreadPool" port="80" protocol="HTTP/1.1" connectionTimeout="60000" keepAliveTimeout="15000" maxKeepAliveRequests="1" redirectPort="443" maxHttpHeaderSize="8192" URIEncoding="UTF-8" enableLookups="false" acceptCount="100" disableUploadTimeout="true"/> 参数说明: * connectionTimeout - 网络链接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。一般可设置为30000毫秒。 * keepAliveTimeout - 长链接最大保持时间(毫秒)。此处为15秒。 * maxKeepAliveRequests - 最大长链接个数(1表示禁用,-1表示不限制个数,默认100个。通常设置在100~200之间) the maximum number of HTTP requests that can be held in the pipeline until the connection is closed by the server. Setting this attribute to 1 disables HTTP/1.0 keep-alive, as well as HTTP/1.1 keep-alive and pipelining. Setting this to -1 allows an unlimited number of pipelined or keep-alive HTTP requests. If not specified, this attribute is set to 100. * maxHttpHeaderSize - http请求头信息的最大程度,超过此长度的部分不予处理。通常8K。 * URIEncoding - 指定Tomcat容器的URL编码格式。 * acceptCount - 指定当全部可使用的处理请求的线程数都被使用时,能够放处处理队列中的请求数,超过这个数的请求将不予处理,默认为10个。defines the maximum queue length for incoming connection requests when all possible request processing threads are in use. Any requests received when the queue is full are refused. The default value is 10. * disableUploadTimeout - 上传时是否使用超时机制 * enableLookups - 是否反查域名,取值为:true或false。为了提升处理能力,应设置为false * bufferSize - defines the size (in bytes) of the buffer to be provided for input streams created by this connector. By default, buffers of 2048 bytes are provided.
* maxSpareThreads - 作多空闲链接数,一旦建立的线程超过这个值,Tomcat就会关闭再也不须要的socket线程 the maximum number of unused request processing threads that are allowed to exist until the thread pool starts stopping the unnecessary threads. The default value is 50. * maxThreads - 最多同时处理的链接数,Tomcat使用线程来处理接收的每一个请求。这个值表示Tomcat可建立的最大的线程数。。 the maximum number of request processing threads to be created by this Connector, which therefore determines the maximum number of simultaneous requests that can be handled. If not specified, this attribute is set to 200. * minSpareThreads - 最小空闲线程数,Tomcat初始化时建立的线程数 the number of request processing threads that are created when this Connector is first started. The connector will also make sure it has the specified number of idle processing threads available. This attribute should be set to a value smaller than that set for maxThreads. The default value is 4. * minProcessors - 最小空闲链接线程数,用于提升系统处理性能,默认值为10。(用于Tomcat4中) * maxProcessors - 最大链接线程数,即:并发处理的最大请求数,默认值为75。(用于Tomcat4中) 备注: Tomcat4中能够经过修改minProcessors和maxProcessors的值来控制线程数。 在Tomcat5+主要对如下参数调整 maxThreads Tomcat使用线程来处理接收的每一个请求。这个值表示Tomcat可建立的最大的线程数。 acceptCount 指定当全部可使用的处理请求的线程数都被使用时,能够放处处理队列中的请求数,超过这个数的请求将不予处理。 connnectionTimeout 网络链接超时,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。一般可设置为30000毫秒。 minSpareThreads Tomcat初始化时建立的线程数。 maxSpareThreads 一旦建立的线程超过这个值,Tomcat就会关闭再也不须要的socket线程。
四、负载均衡、集群的配置 Tomcat6支持分布式部署,能够实现集群功能,提升响应能力。
五、利用JMX监控Tomcat运行状况,须要手工调整启动参数,以下: 打开cataline.bat,增长一行 set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=10090
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file="%CATALINA_BASE%\conf \logging.properties" linux下修改cataline.sh: JAVA_OPTS="-Dcom.sun.management.jmxremote.port=10090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=%CATALINA_BASE\conf\logging.properties" 注意JDK\jre\lib\management\management.properties文件必须存在。 从新启动tomcat节点,而后用jconsole链接(此处端口wei10090)
六、Tomcat增长一个应用 在server.xml的Host标签中增长行 <Context displayName="OA" docBase="/app/web-apps/GACWP" path="" /> path表明上下文名称,空表示是根路径。 ================================= Tomcat6.x目录与server.xml详解 tomcat 服务器是一个免费的开放源代码的Web 应用服务器,目前最新版本是6.x,相对5.x性能提高不少,主要优化了内存使用,加强IO能力,从新构造集群功能。 近期对Tomcat6.x做深刻学习,参考上述声明的Tomcat全攻略,因为笔者是2001年针对Tomcat4.x所写,故参考之并针对 Tomcat6.x作了总结,造成此篇学习笔记,但愿对学习的人有所帮助,本文涵盖了:Tomcat目录、Server.xml元素讲解,数据库链接池配 置、线程池配置、虚拟目录配置。关于如何下载、安装、运行Tomcat略,请google,相信有详细的文章讲述。 tomcat的目录结构以下: 目录名 bin 存放启动和关闭tomcat脚本
conf 包含不一样的配置文件,server.xml(Tomcat的主要配置文件)和web.xml work 存放jsp编译后产生的class文件 webapp 存放应用程序示例,之后你要部署的应用程序也要放到此目录 logs 存放日志文件 lib 这三个目录主要存放tomcat所需的jar文件
server.xml配置简介
元素名
属性 解释 server port 指定一个端口,这个端口负责监听关闭tomcat的请求 shutdown
指定向端口发送的命令字符串 GlobalNamingResources
服务器的全局JNDI资源,能够有子标签<Resource></Resource> Executor(线程池,一个或多个Connector能够共享此线程池) name 线程池名称,名称必须惟一 namePrefix
线程的名字前缀,用来标记线程名字的,这样每一个线程就用这个前缀加上线程编号了,好比 catalina-exec-1 、catalina-exec-2 maxThreads
容许的最大线程池里的线程数量,默认是200,大的并发应该设置的高一些,反正只是限制而已,不占用资源 minSpareThreads
最小的保持活跃的线程数量,默认是25.这个要根据负载状况自行调整了。过小了就影响反应速度,太大了白白占用资源 maxIdleTime
最小的保持活跃的线程数量,默认是25.这个要根据负载状况自行调整了。过小了就影响反应速度,太大了白白占用资源 threadPriority
线程的等级。默认是Thread.NORM_PRIORITY service name 指定service的名字 Connector (表示客户端和service之间的链接) port
指定服务器端要建立的端口号,并在这个断口监听来自客户端的请求 minProcessors 服务器启动时建立的处理请求的线程数 maxProcessors
最大能够建立的处理请求的线程数 enableLookups
若是为true,则能够经过调用request.getRemoteHost()进行DNS查询来获得远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址 redirectPort
指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号 acceptCount
指定当全部可使用的处理请求的线程数都被使用时,能够放处处理队列中的请求数,超过这个数的请求将不予处理 connectionTimeout
指定超时的时间数(以毫秒为单位) Engine (表示指定service中的请求处理机,接收和处理来自Connector的请求) name defaultHost
指定缺省的处理请求的主机名,它至少与其中的一个host元素的name属性值是同样的 jvmRoute host (表示一个虚拟主机、而且能够包含Context子节点配置虚拟目录)
name
指定主机名 appBase
应用程序基本目录,即存放应用程序的目录 unpackWARs
若是为true,则tomcat会自动将WAR文件解压,不然不解压,直接从WAR文件中运行应用程序 autoDeploy
自动部署 xmlValidation
是否验证xml xmlNamespaceAware Realm (表示存放用户名,密码及role的数据库) className
指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口 Context(host子节点配置虚拟目录)
Path
虚拟目录名称 docBase
物理路径 Debug Debug模式 Reload True 从新加载,修改后自动加载 上面咱们讲述了server .xml个元素的含义,下面咱们给出详细示例 Tomcat数据库链接池配置以下: server.xml配置Resource Xml代码
1. <Resource name="jdbc/ExampleDB" auth="Container" type="javax.sql.DataSource"
2. maxActive="100" maxIdle="30" maxWait="10000"
3. username="APP" password="APP"
driverClassName="org.apache.derby.jdbc.ClientDriver"
4. url="jdbc:derby://localhost:1527/springside-example;create=true"/>
context.xml文件增长: Xml代码
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<ResourceLink name="jdbc/ExampleDB" global="jdbc/ExampleDB" type="javax.sql.DataSource"/>
4. Tomcat共享线程池配置: 取消Executor注释,修改链接数至本身合适的数值既可。
Xml代码
1. <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
2. maxThreads="200" minSpareThreads="100" maxIdleTime="60000"/> executor="tomcatThreadPool" 标明此链接使用上面配置的名称为tomcatThreadPool的链接池,无属性共享链接不会生效
protocol表示使用的是 http协议 端口号为8080 Java代码
1. <Connector port="8080" protocol="HTTP/1.1" redirectPort="8443"
2. connectionTimeout="20000"
3. executor="tomcatThreadPool"
4. acceptCount="100"
5. useBodyEncodingForURI="true"
6. enableLookups="false"
7. /> 虚拟目录配置: 在<host></host>之间增长以下 <!-- 配置虚拟目录,例如:http://localhost:8080 --> Xml代码
1. <Context path="/" docBase="D:\workspace\code\HBJH\web"></Context> 附件中是取自springside3中,Tomcat production config配置示例,即生产环境下Tomcat配置