DefaultServlet
:Tomcat处理静态资源的Servelt
DispatcherServlet
:处理rest请求的Servelt
JspServlet
:Tomcat处理Jsp的Servelt
性能调优(场景一):Rest服务
- 如果Tomcat没有用到静态资源的时候,通过移除
conf/web.xml
中的org.apache.catalina.servlets.DefaultServlet
- 如果Tomcat没有用到Jsp的时候,通过移除
conf/web.xml
中的org.apache.jasper.servlet.JspServlet
- 移除Valve:例如,移除AccessLgoValve,他的主要作用是记录日志,原理是类似于Filter的,因为会占用Java的计算时间的占用,可以使用Nginx的AccessLog来代替
性能调优(场景二)如果需要JSP的时候
设置development = false 表示不需要编译JSP
-
Jsp 可以通过Maven的
org.codehaus,moji:hspc-maven-plugin
插件进行预编译, 这样做可以提升,第一次访问JSP的效率<dependency> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.3</version> </dependency>
JspServlet如果development参数为true,它会自定义检查是否修改,如果修改重新翻译,再编译(加载和执行)。所以JspServelt开发模式可能会导致OOM,卸载Class不及时的时候可能会导致Perm区域不够
线程池优化—例子
整体评估,高峰期的QPS达到了10W的,一共有10台机器
每台支撑1w的QPS。
试用Jmeter压测发现高峰请求一次需要的时间是平局值RT =10ms,单线程1秒钟完成100个请求
10000/100 = 100个线程,则表示100个线程比较合适,但还考虑打RT有可能不太稳定,并且加上线程切换耗时增加,可以考虑设置150-200比较合适
关闭自动重载
修改连接线城池的数量