微服务架构情况下
Tomcat配置优化
在SpringBoot中内嵌入了Tomcat服务器,比外部服务器性能要好。
1.假设我们当前在微服务应用情况下:(只提供接口,没有静态资源的)
优化策略:
SpringMVC核心入口 DispatcherSerlet
优化方案:
移除我们conf/web.xml视图层组件JspServlet
org.apache.jasper.servlet.JspServlet
JspServlet: 编译并且执行我们jsp页面
2.去除conf/web.xml中的welcome-file-list配置
3.mime-mapping作用就是告诉给浏览器处理的格式
如果但是是一个微服务rest应用的情况下,只需要配置json即可~~
4.如果服务器集群的,Session的支持不是很又友好 几乎在很多公司都是采用token替代Session session-config 其次在微服务情况下使用的比较少
5.Reloadable配置建议禁止如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可以在不重起tomcat的情况下改变应用程序。
6.移除conf/server.xml AccessLogValve,因为大多数都采用nginx记录每次请求地址
并发性能优化
线程池优化
使用线程池的目的主要提高的多线程的复用机制;
相关核心配置:
在conf/ server.xml 配置相关线程池
maxThreads="150" minSpareThreads="4"/> 相关参数配置: name: 线程池名称. namePrefix: 创建的每个线程的名称前缀, 单独的线程名称为 namePrefix + threadNumber. maxThreads: 线程池中最大并发线程数, 默认值为200, 一般建议设置400~ 800 , 要根据服务器配置和业务需求而定. minSpareThreads: 最小活跃线程数, 也就是核心线程数, 不会被销毁, 会一直存在. prestartminSpareThreads: 是否在启动程序时就生成minSpareThreads个线程, 默认为false, 即不启动. 若不设置为true, 则minSpareThreads的设置就不起作用了. maxIdleTime: 线程最大空闲时间, 超过该时间后, 空闲线程会被销毁, 默认值为6000, 单位为毫秒. maxQueueSize: 最大的等待队列数, 超过则拒绝请求. 默认值为int类型的最大值(Integer.MAX_VALUE), 等同于无限大. 一般不作修改, 避免发生部分请求未能被处理的情况. threadPriority: 线程池中线程的优先级, 默认值为5, 取值范围: 1 ~ 10. 默认情况下Tomcat开启了两个Connector 分别为: Connector 监听8080 Http协议 Connector 监听8009 AJP协议 (tomcat内部之间通讯) 建议可以将Connector连接器移除,能够减少内存的消耗 1.BIO: 阻塞式IO,采用传统的java IO进行操作,该模式下每个请求都会创建一个线程, 适用于并发量小的场景 2.NIO: 同步非阻塞,比传统BIO能更好的支持大并发,tomcat 8.0 后默认采用该模式 3.APR:tomcat 以JNI形式调用http服务器的核心动态链接库来处理文件读取或网络传输操作,需要编译安装APR库 4.AIO:异步非阻塞,tomcat8.0后支持 配置方法:在tomcat conf 下找到server.xml 在 BIO: protocol =" org.apache.coyote.http11.Http11Protocol" NIO: protocol ="org.apache.coyote.http11.Http11NioProtocol" AIO: protocol ="org.apache.coyote.http11.Http11Nio2Protocol" APR: protocol ="org.apache.coyote.http11.Http11AprProtocol"Connector优化
IO模型优化