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 "%r" %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