Tomcat专题(三)-----Tomcat性能优化 - 阿里-马云的学习笔记

时间:2024-02-15 14:51:42

Tomcat专题(三)-----Tomcat性能优化

性能优化

性能优化的三个指标

  • 降低响应时间
  • 提高系统吞吐量(QPS)
  • 提高服务的可用性

原则

性能优化的原则

  • 具体情况具体分析
  • 积少成多

工具

1、JConsole:一个内置 Java性能分析器

jdk安装目录/bin/jconsole.exe

2、JMeter:一个Apache组织开发的基于Java的压力测试工具

下载地址:http://jmeter.apache.org/download_jmeter.cgi

性能优化测试原则

指标:正确率、CPU占有率、QPS、JVM

程序分类:I/0密集型(网络,文件读写),CPU密集型(加密/解密算法)

Tomcat中server.xml优化

Connector连接器的I/O模型

1、连接器模式改为NIO模式

将server.xml中的

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

改为

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

优点:

 

  • NIO模式最大化压榨了CPU,把时间片更好利用起来
  • NIO适合大量长连接

 

2、关闭自动重载

<Context docBase="" reloadable="false"/>

关闭自动重载,默认是true(不同版本中有差异)-----自动加载增加运行开销并且很容易内存溢出

3、配置线程池

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>

Executor标签中属性

  【namePrefix】线程命名前缀

  【maxThreads】最大允许线程数

  【minSpareThreads】最少空闲线程,相当于初始化的线程,线程池中的线程

Connector标签中的属性

  【executor】对上面Executor标签标签的引用

<Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

4、valve优化: 移除掉AccessLogValve

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

valve实现都需要消耗java应用的计算时间,一般我们可以使用nginx来记录日志

Tomcat中web.xml优化

应用程序运行时最终会加载conf/web.xml和应用的web.xml的合集

1、servlet优化

当前应用是REST应用(微服务):

a、去掉不必要的资源:JspServlet

 

将web.xml中的JspServlet注释掉

<servlet>
    <servlet-name>jsp</servlet-name>
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    <init-param>
        <param-name>fork</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>xpoweredBy</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>3</load-on-startup>
</servlet>

b、seesion也可以移除

<session-config>
    <session-timeout>30</session-timeout>
</session-config>

一般微服务不使用session,因为分布式session实现比较麻烦,大部分是通过像Oatuth2这种方式去做。

2、JSP预编译优化

a、JSP -> JAVA -> CLASS。可使用ant先编译jsp

b、Jspservlet开发模式(development)设置为false

SpringBoot中Tomcat优化

Maven中Springboot引入Tomcat

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

相关配置

1.设置线程池 server.tomcat.max-threads=1000

2.关闭Accesslog日志 server.tomcat.accesslog=false