方案选择
对于 SDK 进行性能压测,通过查询相关材料,无外乎两种方式:代码模拟并发、工具压测。
代码模拟
代码模拟是压测最方便的方式,编写 Java 代码,通过 CountDownLatch 管理线程池,来实现并发压测的效果。
具体实现方式可参考以下文章:
基于CountDownLatch和CyclicBarrier编写高并发测试工具类
Java代码模拟并发测试工具——用代码的方式模拟并发
但这种方式也存在不少问题:
- 对线程池理解的不够深刻,设计的测试代码存在难以理解的异常
- 没有合适的工具采集压测过程中产生的性能数据
如果客户对性能数据要求比较宽松,可以使用该方式给出简单的结果,但该种方式显然无法提供专业级别的测试报告
工具压测
市面上进行性能压测的工具非常多,使用最普遍的是:LoadRunner、Jmeter。
一般来说,LoadRunner 专业性更强,测试报告数据更为准确,但 LoadRunner 也存在不少缺点:
- 属于商业级别的压测工具,需要付费使用
- 安装包过于庞大,LR 11 安装包 3.1 GB
- 脚本编写成本相对较高
- 对压测机的配置要求较高
Jmeter 属于开源软件,最新版本已更新至 v5.4.1(需要 JDK 8+),属于较为成熟的压测工具。具备以下优点:
- 属于开源软件,无需付费
- 使用人群较为广泛,测试结果认可程度高
- 安装包较小,不足 60 MB
- 操作简单,学习成本低,脚本设计方便
- 5.0 以后的版本,对报告功能进行增强(参阅:jmeter 5.0版本更新说明)
- 方便定制并进行二次开发
缺点:
- 不适合对复杂系统进行压测
- 脚本维护工作量较大
- 结果分析方面没有 LR 强大
针对 Jmeter 与 LR 的对比,可参阅:性能测试工具 loadrunner 和 jmeter 大 PK
方案设计
由于 SDK 无法单独存在,需要进行对比验证。
后台开发同事配合,先后部署两套服务,一套完全不使用 Java SDK、Java A/B Testing SDK,另外一套服务使用 Java SDK、Java A/B Testing SDK。
设计 Jmeter 脚本,发起相同的 http 请求,分别验证在不同场景(并发)下,两套服务的性能占用情况。
使用 Jmeter 的聚合报告采集压测过程中网络请求的响应时间、吞吐量、错误率等,使用开源性能监测工具 nmon 监测压测期间服务器的性能(CPU、内存 等)。
nmon 使用方法参阅:nmon下载及使用方法(linux资源监控)