赞
踩
授人以鱼不如授人以渔
本文章的目的不在于给出最佳配置,而是带领开发者,能够从实际情况出发,通过不断的调节tomcat和jvm参数,去发现吞吐量,平均响应时间和错误率等信息的变化,同时根据服务器的cpu和内存等信息,结合接口的业务逻辑,最好是测试使用率最高,并发最大,或者是最重要的接口(比如下单支付接口),设置最优的tomcat和jvm配置参数。
目的
通过Tomcat性能优化可以提高网站的并发能力。
Tomcat服务器在JavaEE项目中使用率非常高,所以在生产环境对Tomcat的优化也变得非常重要了。
对于Tomcat的优化,主要是从2个方面入手,一是Tomcat自身的配置,另一个是Tomcat所运行的jvm虚拟机的调优。
服务器资源
服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响。硬件我们不说了,这个方面是钱越多越好是吧。
01
Tomcat配置优化
Linux环境安装运行Tomcat8
如果需要登录系统,必须配置tomcat用户,在安装完Tomcat后,进行如下操作
在/conf/tomcat-users.xml文件中的<tomcat-users>标签里面添加如下内容
- <!-- 修改配置文件,配置tomcat的管理用户 -->
- <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/>
如果是tomcat7,配置了tomcat用户就可以登录系统了,但是tomcat8中不行,还需要修改另一个配置文件,否则访问不了,提示403,打开webapps/manager/META-INF/context.xml文件
- <!-- 将Valve标签的内容注释掉,保存退出即可 -->
- <?xml version=1.0 encoding=UTF-8?>
-
- <Context antiResourceLocking=false privileged=true >
- <!--<Valve className=org.apache.catalina.valves.RemoteAddrValve
- allow=127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1 />-->
- <Manager sessionAttributeValueClassNameFilter=java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap/>
- </Context>
打开浏览器进行访问10.172.0.202:8080
点击“Server Status”,输入用户名、密码进行登录,tomcat/tomcat
登录之后可以看到服务器状态等信息,主要包括服务器信息,JVM,ajp和http信息
02
AJP连接
在服务状态页面中可以看到,默认状态下会启用AJP服务,并且占用8009端口。
什么是AJP
AJP(Apache JServer Protocol)
AJPv13协议是面向包的。WEB服务器和Servlet容器通过TCP连接来交互;为了节省SOCKET创建的昂贵代价,WEB服务器会尝试维护一个永久TCP连接到servlet容器,并且在多个请求和响应周期过程会重用连接。
我们一般是使用Nginx+Tomcat的架构,所以用不着AJP协议,把AJP连接器禁用。
修改conf下的server.xml文件,将AJP服务禁用掉即可。
- <!-- 禁用AJP连接 -->
- <!-- <Connector port=8009 protocol=AJP/1.3 redirectPort=8443 /> -->
重启tomcat,查看效果。可以看到AJP服务已经不存在了。
03
执行器(线程池)
在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能。
修改server.xml文件:
- <!--将注释打开-->
- <Executor name=tomcatThreadPool namePrefix=catalina-exec-
- maxThreads=500 minSpareThreads=50 prestartminSpareThreads=true maxQueueSize=100/>
-
- <!--
- 参数说明:
- maxThreads:最大并发数,默认设置 200,一般建议在 500 ~ 1000,根据硬件设施和业务来判断
- minSpareThreads:Tomcat 初始化时创建的线程数,默认设置 25
- prestartminSpareThreads: 在 Tomcat 初始化的时候就初始化 minSpareThreads 的参数值,如果不等于 true,minSpareThreads 的值就没啥效果了
- maxQueueSize,最大的等待队列数,超过则拒绝请求
- -->
-
- <!--在Connector中设置executor属性指向上面的执行器-->
- <Connector executor=tomcatThreadPool port=8080 protocol=HTTP/1.1
- connectionTimeout=20000
- redirectPort=8443 />
保存退出,重启tomcat,查看效果。
在页面中显示最大线程数为-1,这个是正常的,仅仅是显示的问题,实际使用的是指定的值。如果配置了一个Executor,则该属性的任何值将被正确记录,但是它将被显示为-1
04
3种运行模式
tomcat的运行模式有3种:
bio
性能非常低下,没有经
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。