对于Spring Boot项目在2核2G配置下的压测参数设置,需综合考虑应用复杂度、数据库交互、JVM配置等因素。以下为分步建议:
1. 理论基准参考
- 单节点理论值:轻量级REST API(无DB交互)约可处理500-1000 QPS,带数据库的简单CRUD约100-300 QPS。
- 线程池默认值:Tomcat默认最大线程数200,需在
application.yml中确认:server: tomcat: max-threads: 200
2. 关键压测参数设置
- 并发用户数(建议梯度测试):
- 起始值:50并发
- 梯度增加:50 → 100 → 150 → 200(观察响应时间陡增点)
- 持续时间:单轮至少3-5分钟,稳定性测试需30分钟以上。
- 超时设置:HTTP请求超时建议5-10秒(根据业务容忍度调整)。
3. JVM优化建议
- 内存分配(
-Xms和-Xmx设为相同值避免动态调整):java -jar -Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m your-app.jar - GC日志监控:添加
-XX:+PrintGCDetails分析停顿时间。
4. 监控指标阈值
- CPU:持续>70%需扩容或优化代码。
- 内存:Heap使用>80%可能引发GC频繁。
- 响应时间:P99建议<1秒(视业务需求而定)。
- 错误率:HTTP 5xx错误需<1%。
5. 压测工具示例(JMeter)
<!-- 线程组配置示例 -->
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="SpringBoot压测">
<intProp name="ThreadGroup.num_threads">100</intProp>
<intProp name="ThreadGroup.ramp_time">60</intProp>
<longProp name="ThreadGroup.duration">300</longProp>
</ThreadGroup>
6. 典型瓶颈与优化
- 数据库:连接池大小(如HikariCP建议
maximumPoolSize=CPU核心数*2 + 磁盘数)。 - 缓存:高频查询数据引入Redis。
- 异步处理:耗时操作改用
@Async。
7. 结果分析示例
若观察到:
- QPS在150时RT从50ms突增至500ms:可能达到线程池瓶颈,需调整
max-threads或优化代码。 - GC时间占比>10%:需优化JVM参数或减少对象创建。
建议使用Arthas或VisualVM实时诊断热点方法。最终数值应以实际测试为准,不同业务场景差异可能极大。
云服务器