Tomcat 的性能优化及部署时的参数调整

Tomcat 是一个轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。

下面介绍一下 tomcat 的性能优化及部署时的参数调整。

1、jdk 的选择:

jdk 可以使用 1.4 或 1.5 版本,都没有问题,推荐使用 1.5

2、jvm 的设置:

tomcat 的 jvm 建议调整到 1024M 即在 tomcat/bin/catalina.bat 文件头部添加

set JAVA_OPTS=-Xms1024m -Xmx1024m 默认 tomcat 最大为 64M

3、调整 tomcat 的 server.xml 其中的参数配置,例 

<Connector port=”8080″ maxHttpHeaderSize=”8192″   
maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″   
enableLookups=”false” redirectPort=”8443″ acceptCount=”100″   
connectionTimeout=”20000″   
disableUploadTimeout=”true” URIEncoding=”GBK” />

将其中的 maxThreads=”150″ 修改为 maxThreads=”1500″ ,即可以最大承载 1500 个并发事务。一个用户基本上请求一次服务需要二个线程进行支持(一个是 request, 一个是 response)。这样 IGRP 就可以承载最高 750 个用户的完全并发。maxThreads 默认 tomcat 配置为 200 个。

4、不要遗漏 URIEncoding=”GBK”,能使页面 url 传递中文参数时保证正确。

5、如果使用了 dipper2 的链接池,调整 igrp 的 global-config.xml 将数据库链接的 max 值修改成 500,(需要将 oracle 配置里的 processor 值相应改大(最好修改为 1000 以上),否则无效),即 igrp 并发时链接池可以承载 500 个数据库链接,这样配置基本上可以保证 200 个用户同时并发时能从数据库链接池里得到数据库链接。

6、如果使用 tomcat 自带的 dbcp 数据库链接池, tomcat5.0 配置如下

先修改 server.xml, 增加如下内容,在 标签里增加


<Resource name=”CarmotDS” type=”javax.sql.DataSource”/>

<ResourceParams name=”CarmotDS”>

<parameter>

<name>factory</name>

<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>

</parameter>

<parameter>

<name>url</name>

<value>jdbc:oracle:thin:@192.168.1.12:1521:igrp</value>

</parameter>

<parameter>

<name>password</name>

<value>carmot</value>

</parameter>

<parameter>

<name>maxActive</name>

<value>500</value>

</parameter>

<parameter>

<name>maxWait</name>

<value>9000</value>

</parameter>

<parameter>

<name>driverClassName</name>

<value>oracle.jdbc.driver.OracleDriver</value>

</parameter>

<parameter>

<name>username</name>

<value>carmot_ystest</value>

</parameter>

<parameter>

<name>maxIdle</name>

<value>20</value>

</parameter>

</ResourceParams>

maxActive 是最大激活连接数,这里取值为 500,表示同时最多有 500 个数据库连接。maxIdle 是最大的空闲连接数,这里取值为 20,表示即使没有数据库连接时依然可以保持 20 空闲的连接,而不被清除,随时处于待命状态。MaxWait 是最大等待秒钟数,这里取值 -1,表示无限等待,直到超时为止,也可取值 9000,表示 9 秒后超时。

修改 conf\web.xml, 增加如下内容


<resource-ref>

<description>DB Connection</description>

<res-ref-name>CarmotDS</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<res-auth>Container</res-auth>

</resource-ref>

然后修改 conf\Catalina\localhost\ROOT.xml, 在 context 标签里增加如下内容:

Tomcat 5.5 以上版本可以直接修改 conf\Catalina\localhost\ROOT.xml,, 在 context 标签里增加如下内容:


<Resource name=” CarmotDS ” auth=”Container” type=”javax.sql.DataSource”

maxActive=”500″ maxIdle=”20″ maxWait=”9000″

driverClassName=”oracle.jdbc.driver.OracleDriver”

username=”carmot_ystest” password=”carmot”

url=”jdbc:oracle:thin:@192.168.1.12:1521:igrp”

defaultAutoCommit=”true” removeAbandoned=”true”

removeAbandonedTimeout=”60″ logAbandoned=”true”/>

removeAbandonedTimeout=60, 表示 60 秒没有使用连接会自己回收资源.

修改 global-config.xml


<datasource>java:comp/env/CarmotDS</datasource>

7、Tomcat 管理,必须安装 admin(可以到http://tomcat.apache.org/download-55.cgi下载 Administration Web Application 模块)或 manager 模块

Tomcat5.5 版本还需先修改 conf/ tomcat-users.xml 文件

增加如下内容:

<role rolename=”manager”/>

<role rolename=”admin”/>

<user username=”admin” password=”admin” roles=”admin,manager”/>

配置链接池和管理 tomcat 用户等可以使用 admin 模块

http://localhost:8080/admin/index.jsp

察看 tomcat 状态或部署应用可以使用 manager 模块 (内存,线程等监控)

http://localhost:8080/manager/status

8、日志

<Logger className=”org.apache.catalina.logger.FileLogger” prefix=”localhost_log.” suffix=”.txt” timestamp=”true”/>

<Valve className=”org.apache.catalina.valves.AccessLogValve” directory=”logs” prefix=”access_log.” suffix=”.log” pattern=”combined” fileDateFormat=”yyyy-MM-dd” resolveHosts=”false”/>

更多性能优化相关问题请查看:性能优化相关问题分类导航
* 做个报表还得管理一堆 java 和存过?
* 数据量大计算复杂时,数据预处理该怎么做
* 缓存还有多种用法?看怎样通过缓存来提升性能
* 多数据源报表性能优化方案
* 混合异构数据源关联计算优化方案
* 带隐藏格报表的性能优化方案