Tomcat 8 性能优化

授人以鱼不如授人以渔

本文章的目的不在于给出最佳配置,而是带领开发者,能够从实际情况出发,通过不断的调节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

性能非常低下,没有经

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值