Tomcat8史上最全优化实践
Tomcat8史上最全优化实践
本文链接:https://blog.csdn.net/zhao1299002788/article/details/95191221
Tomcat8史上最全优化实践
- 1、Tomcat8优化
- 1.1、Tomcat配置优化
- 1.1.1、部署安装tomcat8
- 1.1.2 禁用AJP连接
- 1.1.3、执行器(线程池)
- 1.1.4 3种运行模式
- 1.3、使用Apache JMeter进行测试
- 1.3.1、下载安装
- 1.3.2、修改主题和语言
- 1.3.3、创建首页的测试用例
- 1.3.4、启动、进行测试
- 1.3.5、聚合报告
- 1.4、调整tomcat参数进行优化
- 1.4.1、禁用AJP服务
- 1.4.2、设置线程池
- 1.4.2.1、最大线程数为500,初始为50
- 1.4.2.2、最大线程数为1000,初始为200
- 1.4.2.3、最大线程数为5000,初始为1000
- 1.4.2.4、设置最大等待队列数
- 1.4.3、设置nio2的运行模式
- 1.5、调整JVM参数进行优化
- 1.5.1、设置并行垃圾回收器
- 1.5.2、查看GC日志
- 1.5.3、调整年轻代大小
- 1.5.4、设置G1垃圾回收器
- 1.5.5、小结
- 1.1、Tomcat配置优化
- 2、JVM字节码
- 2.1、通过javap命令查看class文件的字节码内容
- 2.2、常量池
- 2.3、描述符
- 2.3.1、字段描述符
- 2.3.2、方法描述符
- 2.4、解读方法字节码
- 2.4.1、图解
- 2.5、研究i++与++i的不同
- 2.5.1、对比
- 2.5.2、图解
- 2.6、字符串拼接
- 2.7、小结
- 3、代码优化
- 3.1、尽可能使用局部变量
- 3.2、尽量减少对变量的重复计算
- 3.3、尽量采用懒加载的策略,即在需要的时候才创建
- 3.4、异常不应该用来控制程序流程
- 3.5、不要将数组声明为public static final
- 3.6、不要创建一些不使用的对象,不要导入一些不使用的类
- 3.7、程序原先过程中避免使用反射
- 其他优化
1、Tomcat8优化
tomcat服务器在JavaEE项目中使用率非常高,所以在生产环境对tomcat的优化也变得非常重要了。
对于tomcat的优化,主要是从两个方面入手,第一是,tomcat自身的配置,另一个是tomcat所运行的jvm虚拟机的。
1.1、Tomcat配置优化
1.1.1、部署安装tomcat8
下载并安装 :https://tomcat.apache.org/download-80.cgi
1.1.2 禁用AJP连接
在服务状态页面中可以看到,默认状态下会启用AJP服务,并且占用8009端口。
什么是AJP呢?
AJP(Apache JServer Protocol)
AJPv13协议是面向包的。WEB服务器和Servlet容器通过TCP连接来交互;为了节省Socket创建的昂贵代价,WEB服务器会
尝试维护一个永久TCP连接到servlet容器,并且在多个请求和响应周期过程会重用连接。
我们一般是使用Nginx+tomcat的架构,所以用不着AJP协议,所以把AJP连接器禁用。修改conf下的server.xml文件,将AJP
服务禁用掉即可。
1.1.3、执行器(线程池)
在tomcat中每一个用户请求都是一个线程,所以可以使用线程池提高性能。
修改server.xml文件 :
保存退出,重启tomcat,查看效果。
1.1.4 3种运行模式
tomcat的运行模式有3种 :1. bio默认的模式,性能非常低下,没有经过任何优化处理和支持。2. nionio(new I/O),是Java SE 1.4及后续版本提供的一种新的I/O操作方式(既java.nio包及其子包)。Java nio是一个基于缓冲区、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O的缩写。它拥有比传统I/O操作(bio)更好的并发运行性能。3. apr安装起来最空难,但是从操作系统级别来解决异步的IO问题,大幅度的提高性能。
推荐使用nio,不过,在tomcat8中有最新的nio2,速度更快,建议使用nio2.
建议tomcat8以下使用nio,tomcat8及以上使用nio2.
1.3、使用Apache JMeter进行测试
Apache JMeter是开源的压力测试工具,测量tomcat的吞吐量等信息。
1.3.1、下载安装
下载地址 :http://jmeter.apache.org/download_jmeter.cgi
安装 :直接将下载好的zip压缩包进行解压即可。
1.3.2、修改主题和语言
默认的主题是黑色风格的主题并且语言是英语,这样不太方便使用,所以需要修改一下主题和中文语言。
1.3.3、创建首页的测试用例
第一步 :保存测试用例
第二步 :添加线程组,使用线程模拟用户的并发
第四步 :添加请求监控
1.3.4、启动、进行测试
1.3.5、聚合报告
1.4、调整tomcat参数进行优化
通过上面测试可以看出,tomcat在不做任何调整时,吞吐量为73次/秒。
1.4.1、禁用AJP服务
1.4.2、设置线程池
通过设置线程池,调整线程池相关的参数进行测试tomcat的性能。
1.4.2.1、最大线程数为500,初始为50
1.4.2.2、最大线程数为1000,初始为200
1.4.2.3、最大线程数为5000,初始为1000
是否是线程数最多,速度越快呢?
可以看到,虽然最大线程已经设置到5000,但是实际测试效果并不理想,并且平均的响应时间也变长, 所以单纯靠提升线程数量是不能一直得到性能提升的。
1.4.2.4、设置最大等待队列数
1.4.3、设置nio2的运行模式
将最大线程设置为500进行测试 :
可以看到,平均响应时间有缩短,吞吐量有提升,可以得出结论 :nio2的性能要高于nio。
1.5、调整JVM参数进行优化
为了测试一致性,依然将最大线程数设置为500,启用nio2运行模式。
1.5.1、设置并行垃圾回收器
1.5.2、查看GC日志
1.5.3、调整年轻代大小
1.5.4、设置G1垃圾回收器
1.5.5、小结
通过上述测试,可以总结出,对tomcat性能优化就是需要不断的进行调整参数,然后测试结果,可能会调优也可能会调差,这时就需要借助于gc的可视化工具来看gc的情况。再帮助我们做出决策应用调整那些参数。
2、JVM字节码
2.1、通过javap命令查看class文件的字节码内容
2.2、常量池
2.3、描述符
2.3.1、字段描述符
2.3.2、方法描述符
2.4、解读方法字节码
2.4.1、图解
2.5、研究i++与++i的不同
2.5.1、对比
2.5.2、图解
2.6、字符串拼接
2.7、小结
使用字节码的方式可以很好查看代码底层的执行,从而可以看出哪些实现效率高,哪些实现效率低。可以更好的对我们的代码做优化。让程序执行效率更高。
3、代码优化
不仅仅在运行环境进行优化,还需要在代码本身做优化,如果代码本身存在性能问题,那么在其他方面再怎么优化也不可能达到最优效果。
3.1、尽可能使用局部变量
3.2、尽量减少对变量的重复计算
明确一个概念,对方法的调用,即使方法中只有一条语句,也是有消耗的。例如 :
这样,在list.size()很大的时候,就减少了很多的消耗。
3.3、尽量采用懒加载的策略,即在需要的时候才创建
3.4、异常不应该用来控制程序流程
3.5、不要将数组声明为public static final
因为毫无意义,这样只是定义了引用为static final,数组的内容还是可以随意改变的,将数组声明为public更是一个安全漏洞,这意味着这个数组可以被外部类所改变。
3.6、不要创建一些不使用的对象,不要导入一些不使用的类
3.7、程序原先过程中避免使用反射
其他优化
Tomcat8史上最全优化实践相关推荐
- 禁用编译优化_Tomcat8史上最全优化实践
Tomcat8优化 1.Tomcat8优化 1.1.Tomcat配置优化 1.1.1.部署安装tomcat8 1.1.2 禁用AJP连接 1.1.3.执行器(线程池) 1.1.4 3种运行模式 1.3 ...
- python优化算法工具包_这可能是史上最全的 Python 算法集(建议收藏)
原标题:这可能是史上最全的 Python 算法集(建议收藏) 导读:本文是一些机器人算法(特别是自动导航算法)的Python代码合集.其主要特点有以下三点: 选择了在实践中广泛应用的算法: 依赖最少: ...
- 史上最全的 MySQL 高性能优化实战总结
转载自 史上最全的 MySQL 高性能优化实战总结 一.前言 MySQL 对于很多 Linux 从业者而言,是一个非常棘手的问题,多数情况都是因为对数据库出现问题的情况和处理思路不清晰.在进行 M ...
- 史上最全MySQL 大表优化方案(长文)
转载自 史上最全MySQL 大表优化方案(长文) 当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 一.单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑 ...
- 这可能是史上最全的Python算法集!
来源 | CSDN(ID:CSDNnews ) 本文是一些机器人算法(特别是自动导航算法)的Python代码合集. 其主要特点有以下三点:选择了在实践中广泛应用的算法:依赖最少:容易阅读,容易理解每个 ...
- 史上最全 Java 多线程面试题及答案
这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题. 这些多线程的问题,有些来源于各大网站.有些来源于自己的思考.可能有些问题网上有.可能有些问题对应的答案也有.也可能有些各位网友也 ...
- 程序员如何跳出35岁魔咒,史上最全思维图收集解救你
时常有人在知乎.百度等平台抛出问题:程序员过了 35 岁或 40 岁是不是就失去了竞争力,要转管理岗了吗? 100offer 在2017年对其平台上的5844 位技术岗位求职者做了一个抽样调查,得出了 ...
- 史上最全Redis面试题(2020最新版)
导读:2020 年最新版 68 道Redis面试题,两万字干货,整理分享至此,希望对大家有帮助!文末有PDF文档下载方式,可按需下载. 概述 1. 什么是Redis? Redis(Remote Dic ...
- 史上最全分布式数据库概述
墨墨导读:在集中式数据库系统不能完全符合实际需要的形势下,集中式DB的"集中计算"概念向"分布计算"概念发展.分布计算主要体现在客户机/服务器模式的分布式数据库 ...
最新文章
- Lock锁子类了解一下
- 分析Windows和Linux动态库
- js bool true false 真假比较
- java语言程序设计全国考试题,2019年12月全国计算机等级考试[Java语言程序设计]复习题及答案...
- git stash参数介绍
- [Leedcode][JAVA][第914题][最大公约数]
- 高能预警!Apache Flink Meetup · 上海站返场啦
- 促促促,如何确保系统扛得住 | 《尽在双11》抢鲜预览
- loading怎么关闭 vant_Vant Loading 加载
- 汉邦监控录像数据恢复软件---蓝梦软件BestRecoveryForHBMS
- 【经验】win11上安装visio
- tomcat启动异常:org.apache.catalina.deploy.WebXml addFilter或者the JDBC Driver has been forcibly unregister
- java实现树形菜单
- C语言-小写转换大写
- 【Linux】gcc-程序的翻译四个阶段(图示)
- 原生jq下载文件的方式
- intel平板Android系统,Pad变PC:将Win10装入Android平板
- ubuntu安装pyCUDA
- 视频教程-iOS进阶开发-iOS
- linux版navicat安装和破解