三、压力测试
jvm初步学习:《深入理解Java虚拟机》1 —— 第二章 Java内存区域与内存溢出异常_HotRabbit.的博客-CSDN博客
压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测都 是为了系统在线上的处理能力和稳定性维持在一个标准范围内,做到心中有数。
使用压力测试,我们有希望找到很多种用其他测试方法更难发现的错误。有两种错误类型是: 内存泄漏,并发与同步。
有效的压力测试系统将应用以下这些关键条件:重复,并发,量级,随机变化。
1.性能指标
- 响应时间(Response Time: RT) 响应时间指用户从客户端发起一个请求开始,到客户端接收到从服务器端返回的响 应结束,整个过程所耗费的时间。 HPS(Hits Per Second) :每秒点击次数,单位是次/秒。
- TPS(Transaction per Second):系统每秒处理交易数,单位是笔/秒。
- QPS(Query per Second):系统每秒处理查询次数,单位是次/秒。 对于互联网业务中,如果某些业务有且仅有一个请求连接,那么 TPS=QPS=HPS,一 般情况下用 TPS 来衡量整个业务流程,用 QPS 来衡量接口查询次数,用 HPS 来表 示对服务器单击请求。
- 无论 TPS、QPS、HPS,此指标是衡量系统处理能力非常重要的指标,越大越好,根据经 验,一般情况下:
- 金融行业:1000TPS~50000TPS,不包括互联网化的活动
- 保险行业:100TPS~100000TPS,不包括互联网化的活动
- 制造行业:10TPS~5000TPS
- 互联网电子商务:10000TPS~1000000TPS
- 互联网中型网站:1000TPS~50000TPS
- 互联网小型网站:500TPS~10000TPS
- 最大响应时间(Max Response Time) 指用户发出请求或者指令到系统做出反应(响应) 的最大时间。
- 最少响应时间(Mininum ResponseTime) 指用户发出请求或者指令到系统做出反应(响 应)的最少时间。
- 90%响应时间(90% Response Time) 是指所有用户的响应时间进行排序,第 90%的响 应时间。
- 从外部看,性能测试主要关注如下三个指标
- 吞吐量:每秒钟系统能够处理的请求数、任务数。
- 响应时间:服务处理一个请求或一个任务的耗时。
- 错误率:一批请求中结果出错的请求所占比例
2.性能监控
jvm 调优:
- 调的是稳定,并不能带给你性能的大幅提升。服务稳定的重要性就不用多说了,
- 保证服务的稳定,gc 永远会是 Java 程序员需要考虑的不稳定因素之一。复杂和高并发下的 服务,必须保证每次 gc 不会出现性能下降,各种性能指标不会出现波动,gc 回收规律而且 干净,找到合适的 jvm 设置。
- Full gc 最会影响性能,根据代码问题,避免 full gc 频率。可以 适当调大年轻代容量,让大对象可以在年轻代触发 yong gc,调整大对象在年轻代的回收频 次,尽可能保证大对象在年轻代回收,减小老年代缩短回收时间;
常用工具:
命令示例:
3.JMeter
按照JMeter压力测试Apache JMeter - Download Apache JMeter
运行 bin/jmeter.bat 即可
4.jconsole监控
jvisualvm是jconsole的升级版。建议使用jvisualvm。第五小节是jvisualvm的使用方法
通过cmd启动
5.jvisualvm监控
cmd启动
6.中间件性能测试
docker stats 查看内存使用率
测试nginx 访问80端口
由于nginx需要多线程调用其他服务,而不需要创建什么对象,所以使用的cpu较多
测试结果:
分析:
- 中间件越多,性能损失越大,大多都损失在网络交互了;
- 业务:
- Db(MySQL 优化索引)
- 模板的渲染速度(缓存)
- 静态资源(占用tomcat的资源)
- JVM的垃圾回收(老年代回收、新生代回收)
7.优化-nginx动静分离
为了避免静态资源的请求占用tomcat线程(静态资源放在tomcat中),可以将静态资源(css、js、图片等)直接放到nginx中。
指定路径/static/**所有请求都由nginx直接返回
- 在mydata/nginx/html下新建文件夹static,经静态资源文件index放进去
- 修改项目中的html页面,加上static/
- 修改nginx配置,在
conf.d
新建该项目的分配置文件guli-shop.conf
,添加静态资源处理请求