压力测试介绍

优点

可以发现其他测试难以发现的问题,有两种错误类型是

  1. 内存泄漏

  2. 并发和同步

性能指标

  • 响应时间(Response Time:RT)
  • HPS(Hist per Second):每秒点击数 次/秒
  • TPS(transaction per second):每秒处理查询次数 笔/秒
  • QPS(Query per second):每秒处理查询次数 次/秒

一般用TPS来衡量整个业务流程,用QPS来衡量接口查询次数,用HPS来表示服务器点击请求

  • 越大越好

jMeter

  1. 启动 jMeter.bat
  2. 创建线程组 设置线程数 请求次数
    1. 在线程组监听器创建 察看结果树
    2. 在线程组监听器创建 汇总报告
    3. 在线程组监听器创建 聚合报告
影响性能的点

数据库、应用程序、中间件(tomcat、Nginx)、网络和操作系统方面。

  • cpu密集型
  • IO密集型
Already in use

windows本身提供的端口访问机制的问题 得修改regedit注册表

jVisualvm
安装visualGC插件

中间件越多,性能损失越大,大多损失在网络交互

哪些数据适合放入缓存?

  • 即时性、数据一致性要求不高的
  • 访问量大且更新频率不高的数据(读多,写少)
缓存
异常

使用redis产生堆外内存溢出异常 OutofDirectMemoryError
原因:

  1. springboot2.0以后使用letture作为操作redis的客户端。它使用netty进行网络通信。
  2. lettuce的bug导致netty堆外内存溢出 可以通过-Dio.netty.maxDirectMemory

解决方案:不能使用-Dio.netty.maxDirectMemory只去调大堆外内存。

  1. 升级lettuce客户端。
  2. 切换使用Jedis 版本旧 没更新
缓存穿透:

查询一个一定不存在的数据,缓存没有,数据库没有,没有将null写入缓存

解决

null结果缓存,并加入短暂过期时间。

缓存雪崩

设置缓存时采用了相同的过期时间,导致缓存在某一时刻同时失效,请求全部转发到DB

解决

在原有的失效时间基础上加一个随机值,避免大量缓存同时失效。

缓存击穿

热点数据key在大量请求同时进来前正好失效,那么所有对这个key的查询都落到DB

解决

加锁
大量并发只让一个去查,其他人等待,查到以后释放锁,其他人获取到锁,先查缓存,就会有数据,不用去DB

分布式锁

Redisson 自动续期 服务宕机过期时间到 自动释放锁

缓存一致性
  1. 双写 该数据库 同时更新该缓存

    1. 有脏数据问题
  2. 失效模式 写数据库 删除缓存

    1. 脏数据问题

解决 使用canal订阅binlog日志

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BananaNo2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值