tomcat7优化
程序员文章站
2022-03-14 13:49:08
...
目的
通过优化tomcat题号网站的并发能力。
服务器资源
服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响。
优化配置
配置tomcat管理员帐户
在conf/tomcat-user.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/
tomcat的三种运行模式
tomcat运行模式有三种
- bio 默认的模式,性能非常低下,没有经过任何优化处理和支持。
- nio 利用java的异步io护理技术,no blocking IO技术。
- apr 安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提升性能。
启动NIO模式
修改server.xml里的Connector节点,修改protocol为org.apache.coyote.http11.Http11NioProtocol
执行器(线程池)
在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能。
开启并使用
参数说明
最佳实战
连接器(Connector)
Connector是tomcat接收请求的入口,每个Connector有自己专属的监听端口
Connector有两种:Http Connector和AJP Connector,如下图
通用属性
标准实现
除了上面列出的常见的连接器属性,标准的HTTP连接器(BIO、NIO和APR/native)都支持以下属性。
NIO的具体配置
最佳实战
禁用AJP连接器
AJP(Apache JServer Protocol)
AJPv13协议是面向包的。WEB服务器和Servlet容器通过TCP连接来交互;为了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且在多个请求和响应周期过程会重用连接。
我们一般是使用Nginx+tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用。
在管理界面中看不到ajp了。
JVM参数优化
适当调整tomcat的运行JVM参数可以提升整体性能。
JVM内存模型
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 –XX:+DisableExplicitGC”
参数说明
1、file.encoding 默认文件编码
2、-Xmx1024m 设置JVM最大可用内存为1024MB
3、-Xms1024m 设置JVM最小内存为1024MB。此值可以设置与-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:+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”