您的位置:首页 > 运维架构 > Tomcat

tomcat6+mysql5.1+dbcp性能调优

2014-03-01 10:21 369 查看
优化Tomcat6

1.内存优化其实也就是对JVM内存进行设置

配置位置:%TOMCAT_HOME%/bin下,

Window:catalina.bat

Linux/Unix:catalina.sh

首行添加:JAVA_OPTS=-Xms256m –Xmx256m

注意:Linux环境下:JAVA_OPTS=”-Xms256m –Xmx256m”,即参数要加引号,不然不起作用

以下值大部分情况为默认值,应根据具体服务器硬件配置及业务特性来配置

-Xverify:none关闭大部分类验证措施,以缩短虚拟机类加载时间

-Xms16m 堆内存初始值 (M>1G ? 1G/64 : M/64)

-Xmx256m 堆内存最大值 (M>1G ? 1G/4 : M/4)

-Xmn4m 新生代初始值 (迸发收集器下通过该值来设置,该设置优先级高于-XX:NewRatio)

-XX:NewRatio=2 老年代与新生代比值(迸发收集器下默认=7)

-XX:SurvivorRatio=8 Eden区与Survivro区的比值

-XX:PermSize=12m 永久代初始值

-XX:MaxPermSize=64m 永久代最大值

-Xss1024k 栈内存大小

-XX:MaxTenuringThreshold=15 由年轻代到年老带的GC阀值(迸发收集器下默认=4)

-XX:+UseFastAccessorMethods get,set 方法转成本地代码

2.优化线程池

配置位置:%TOMCAT_HOME%/conf下,

server.xml文件

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="2000" minSpareThreads="500"/>


name:线程池名称,必须唯一

namePrefix:线程池创建线程的名称前缀,线程名称一般为namePrefix+ threadNumber

maxThreads:线程池存活的最大线程数,默认值为200

minSpareThreads:线程池初始线程数(保持活跃的最小线程数),默认值为25

一般只需要配置maxThreads和minSpareThreads即可

具体其余参数可参考:%TOMCAT_HOME%\webapps\docs\ config\executor.html

<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
acceptCount="1024"
compression="on"/>


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

enableLookups:是否反查域名,取值为:true或false。 缺省值为false表示使用客户端主机名的DNS解析功能,被ServletRequest.getRemoteHost方法调用。

compression:压缩传输,取值on/off/force,默认值off?

具体其余参数可参考:%TOMCAT_HOME%\webapps\docs\ config\http.html

3.优化Mysql

MySQL 默认的最大连接数为 100,可以在 mysql 客户端使用以下命令查看

mysql> show variables like 'max_connections';

进入

C:\Program Files (x86)\MySQL\MySQL Server 5.0\my.ini 修改最大连接数为1024

max_connections=1024

4.优化DBCP

dbcp.initialSize=200
dbcp.maxActive=-1
dbcp.maxIdle=300
dbcp.minIdle=200
dbcp.maxWait=18000
dbcp.timeBetweenEvictionRunsMillis=60000
dbcp.minEvictableIdleTimeMillis=180000
dbcp.removeAbandoned=true
dbcp.removeAbandonedTimeout=300
数据库连接池:

driverClassName=com.mysql.jdbc.Driver

url=jdbc:mysql://x.x.x.x:3306/mydb?useUnicode=true&characterEncoding=UTF-8

username=root

password=1234

#初始化连接:连接池启动时创建的初始化连接数量

initialSize=200

#最大活动连接:连接池在同一时间能够分配的最大活动连接的数量, 如果设置为非正数则表示不限制

maxActive=-1

#最大空闲连接:连接池中容许保持空闲状态的最大连接数量,超过的空闲连接将被释放,如果设置为负数表示不限制

maxIdle=300

#最小空闲连接:连接池中容许保持空闲状态的最小连接数量,低于这个数量将创建新的连接,如果设置为0则不创建

minIdle=200

#最大等待时间:当没有可用连接时,连接池等待连接被归还的最大时间(以毫秒计数),超过时间则抛出异常,如果设置为-1表示无限等待

maxWait=18000

#在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位. 如果设置为非正数,则不运行空闲连接回收器线程

timeBetweenEvictionRunsMillis=60000

#在每次空闲连接回收器线程(如果有)运行时检查的连接数量numTestsPerEvictionRun=5

#连接在池中保持空闲而不被空闲连接回收器线程(如果有)回收的最小时间值,单位毫秒

minEvictableIdleTimeMillis=180000

#标记是否删除泄露的连接,如果他们超过了removeAbandonedTimout的限制.如果设置为true, 连接被认为是被泄露并且可以被删除,

#如果空闲时间超过removeAbandonedTimeout. 设置为true可以为写法糟糕的没有关闭连接的程序修复数据库连接

removeAbandoned=true

#泄露的连接可以被删除的超时值, 单位秒

removeAbandonedTimeout=300

#指明是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个.

#注意: 设置为true后如果要生效,validationQuery参数必须设置为非空字符串testOnBorrow=true

5.其余优化

5.1启用NIO

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />


修改为

<Connectorport="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />


5.2调整文件打开数

单进程文件打开数:默认Windows下打开文件数是2000,Linux系统默认打开文件数是1024。

实际的生产环境中(获取图片等,都属于打开文件),这个值总是显得太小,经常会报“too many open files” 等这样的错误

导致系统死掉,所以我们总是要修改该值。

Linux下ulimit –a 可以查看,默认是1024

open files (-n) 1024

vi /etc/profile 加入ulimit -n 65535重新启动,就把linux改成打开文件最大数为65535

5.3精简Tomcat6的配置

删除不需要的一些管理和帮助文件,提高Tomcat的安全性

5.4在web下不显示目录列表

在web.xml中把listings改成false就行了

6.归纳、建议

归纳起来,Tomcat的优化主要涉及:

内存优化:设置相应的JVM内存参数和确定适合应用的垃圾收集器及其参数

线程优化:采用线程池,并配置相应的参数

数据库连接池优化:选择恰当的数据源,设置相应的数据源配置参数

其余优化:启用NIO、调整数据库本身的连接数目限制、调整服务器文件打开数

其余建议:

内存、线程、数据库连接池等必须一起调整,避免其中某一项成为系统瓶颈(往往前端WEB

服务器,如Httpd,Nginx等,后端数据库本身,也需要做一定的配置调整)

服务器尽量采用64位、4CPU、 4G内存及以上硬件

注意:此种情况下,可以采用64位JDK使用大内存,这时,需要控制FULL GC的频率和时间,

尽量做到不需要出现FULL GC或者夜间定时FULL GC,避免FULL GC造成的停顿,或者通过部署

多32位虚拟机来进行逻辑集群,以充分利用服务器硬件资源。

注意根据CPU数目,业务类别来设置垃圾收集器的类别,同时注意控制GC频率

注意内存、线程池、数据库连接池等的配置,不是越大越好

Tomcat内存参数配置建议书写在catalina.bat(catalina.sh)的首行,并且所有参数书写在同一行

Linux下需要给配置参数加引号
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: