tomcat6+mysql5.1+dbcp性能调优

19 篇文章 0 订阅

优化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&amp;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下需要给配置参数加引号 















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值