Tomcat优化

来源:互联网 发布:js是什么端语言 编辑:程序博客网 时间:2024/06/07 22:27

Tomcat优化

标签(空格分隔): Tomcat


优化的目的

通过优化tomcat提高网站的并发能力

优化一:提高服务器资源

服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响

优化二:调整Tomcat系统参数

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种:

bio
默认的模式,性能非常低下,没有经过任何优化处理和支持.
**nio
利用java的异步io护理技术,no blocking** IO技术.
apr
安装起来最困难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能

2.1 启用NIO模式
修改server.xml里的Connector节点,修改protocol为org.apache.coyote.http11.Http11NioProtocol

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

3、执行器(线程池)
在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能
3.1 开启并使用
修改server.xml配置:

  <Service name="Catalina">    <!--The connectors can use a shared executor, you can define one or more named thread pools-->    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"        maxThreads="150" minSpareThreads="4"/>    <!-- A "Connector" represents an endpoint by which requests are received         and responses are returned. Documentation at :         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)         Java AJP  Connector: /docs/config/ajp.html         APR (HTTP/AJP) Connector: /docs/apr.html         Define a non-SSL HTTP/1.1 Connector on port 8080    -->    <Connector connectionTimeout="20000" port="8080" executor="tomcatThreadPool"        protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>

connector的executor的值要对应Executor的name的值,其中该值自定义即可。
3.2 参数介绍(可在Tomcat主页的Configuration中查看)
这里写图片描述
3.3 最佳实践 — tomcat 7版本

   <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"        maxThreads="800" minSpareThreads="100" maxQueueSize= "100"        prestartminSpareThreads = "true" minSpareThreads="4"/>

4、连接器(Connector)
Connector是Tomcat接收请求的入口,每个Connector有自己专属的监听端口
Connector有两种:HTTP Connector和AJP Connector
最佳实践(参数见Tomcat主页Configuration):
这里写图片描述

5、禁用AJP的连接器
AJP(Apache JServer Protocol)
AJPv13协议是面向包的。WEB服务器和Servlet容器通过TCP连接来交互;为了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且在多个请求和响应周期过程会重用连接。
这里写图片描述

我们一般是使用Nginx+tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用。

   <!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>-->

优化三:调整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

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”

原创粉丝点击