tomcat优化

Posted 陈晓婵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tomcat优化相关的知识,希望对你有一定的参考价值。

        通过优化tomcat提高网站的并发能力,服务器所能提供CPU,内存,硬盘的性能对处理能力有决定性影响.本文通过优化配置,禁用AJP连接器,JVM参数的优化三个方面来讲解tomcat优化.


1.优化配置

1)配置tomcat管理员账户

在conf/ tomcat-users.xml下添加用户:
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="admin-gui,admin,manager-gui,manager"/>

启动tomcat,登录查看信息:
http://127.0.0.1:8080/



2)tomcat的3种运行模式    tomcat的运行模式有3种:
     1、 bio
     默认的模式,性能非常低下,没有经过任何优化处理和支持.
     2、 nio
     利用java的异步io护理技术,no blocking IO技术.
     3、 apr
     安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能.
(1)启动NIO模式
修改server.xml里的Connector节点,修改protocol为org.apache.coyote.http11.Http11NioProtocol






3)执行器(线程池)
在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能。
(1)开启并且使用 配置:


实践:

参数说明:  maxThreads(最大线程数)
 minSpareThreads(最小活跃线程数)
 maxQueueSize(最大的等待队里数,超过则请求拒绝)
 prestartminSpareThreads(是否在启动时就生成minSpareThreads个线程)
4)连接器(connector)


2.禁用AJP连接器
AJP(Apache JServer Protocol)
AJPv13协议是面向包的。WEB服务器和Servlet容器通过TCP连接来交互;为了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且在多个请求和响应周期过程会重用连接。
我们一般使用nginx+tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用.


3.JVM参数的优化 适当调整tomcat的运行JVM参数可以提升整体性能.
修改文件:bin/catalina.sh

JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms1024m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewRatio=2 -XX:MaxTenuringThreshold=50 -XX:+DisableExplicitGC"

参数说明:
1、	file.encoding 默认文件编码
2、	-Xmx1024m  设置JVM最大可用内存为1024MB
3、	-Xms1024m  设置JVM最小内存为1024m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
4、	-XX:NewSize  设置年轻代大小
5、	XX:MaxNewSize 设置最大的年轻代大小
6、	-XX:PermSize  设置永久代大小
7、	-XX:MaxPermSize 设置最大永久代大小
8、	-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与终身代的比值(除去永久代)。设置为4,则年轻代与终身代所占比值为1:4,年轻代占整个堆栈的1/5
9、	-XX:MaxTenuringThreshold=0:设置垃圾最大年龄,默认为:15。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。
10、	-XX:+DisableExplicitGC这个将会忽略手动调用GC的代码使得 System.gc()的调用就会变成一个空调用,完全不会触发任何GC

在tomcat中设置JVM参数 windows中: 修改bin/catalina.bat文件设置参数(第一行)
set JAVA_OPTS=-Dfile.encoding=UTF-8 -server -Xms1024m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC


linux中: 修改bin/catalina.sh文件参数(第一行)
JAVA_OPTS="-Dfile.encoding=UTF-8 -server -Xms1024m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC"



以上是关于tomcat优化的主要内容,如果未能解决你的问题,请参考以下文章

基于代价的慢查询优化建议

解读oracle执行计划-待续

A星寻路 A星算法优化

一文读懂简单查询代价估算

深入MaxCompute理解数据运算和用户的大脑:基于代价的优化器

DSE精选综述 | 关于提升数据库优化器:基数估计代价模型计划枚举