maku-boot压力测试:系统性能压测方案
概述
在企业级应用开发中,性能测试是确保系统稳定性和可靠性的关键环节。maku-boot作为基于SpringBoot 3.5的企业级低代码平台,承载着复杂的业务逻辑和高并发场景。本文将详细介绍maku-boot系统的性能压测方案,帮助开发者全面评估系统性能表现。
压测环境配置
硬件环境要求
| 组件 | 推荐配置 | 最低配置 |
|---|---|---|
| CPU | 8核以上 | 4核 |
| 内存 | 16GB以上 | 8GB |
| 磁盘 | SSD 200GB+ | HDD 100GB+ |
| 网络 | 千兆网卡 | 百兆网卡 |
软件环境配置
# application-test.yml 测试环境配置
server:
port: 8080
tomcat:
max-threads: 1000
min-spare-threads: 100
max-connections: 10000
spring:
datasource:
url: jdbc:mysql://localhost:3306/maku_test?useUnicode=true&characterEncoding=utf8&useSSL=false
username: root
password: test123
hikari:
maximum-pool-size: 50
minimum-idle: 10
connection-timeout: 30000
redis:
host: localhost
port: 6379
database: 0
timeout: 3000
lettuce:
pool:
max-active: 100
max-idle: 50
min-idle: 10
压测工具选择
JMeter压测方案
<!-- JMeter测试计划示例 -->
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.6.2">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="maku-boot性能测试" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="用户定义的变量" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="TestPlan.user_define_classpath"></stringProp>
</TestPlan>
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="并发用户测试" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">1</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">100</stringProp>
<stringProp name="ThreadGroup.ramp_time">60</stringProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
</hashTree>
</hashTree>
</jmeterTestPlan>
Gatling压测方案
// Gatling性能测试脚本
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import scala.concurrent.duration._
class MakuBootStressTest extends Simulation {
val httpProtocol = http
.baseUrl("http://localhost:8080")
.acceptHeader("application/json")
.contentTypeHeader("application/json")
val loginScenario = scenario("用户登录性能测试")
.exec(
http("用户登录")
.post("/api/auth/login")
.body(StringBody("""{"username":"admin","password":"admin123"}"""))
.check(status.is(200))
.check(jsonPath("$.data.accessToken").saveAs("accessToken"))
)
.pause(1.second)
val userListScenario = scenario("用户列表查询")
.exec(
http("获取用户列表")
.get("/api/system/user/list")
.header("Authorization", "Bearer ${accessToken}")
.check(status.is(200))
)
setUp(
loginScenario.inject(
rampUsers(100).during(60.seconds)
),
userListScenario.inject(
constantUsersPerSec(50).during(300.seconds)
)
).protocols(httpProtocol)
}
关键性能指标
响应时间指标
| 性能指标 | 优秀 | 良好 | 一般 | 较差 |
|---|---|---|---|---|
| 平均响应时间 | <100ms | 100-300ms | 300-1000ms | >1000ms |
| 95%响应时间 | <200ms | 200-500ms | 500-2000ms | >2000ms |
| 99%响应时间 | <500ms | 500-1000ms | 1000-3000ms | >3000ms |
| 吞吐量 | >1000 TPS | 500-1000 TPS | 100-500 TPS | <100 TPS |
系统资源指标
压测场景设计
场景一:用户登录压测
// 登录接口性能测试代码示例
@SpringBootTest
@AutoConfigureMockMvc
class LoginPerformanceTest {
@Autowired
private MockMvc mockMvc;
@Test
void testLoginPerformance() throws Exception {
long startTime = System.currentTimeMillis();
for (int i = 0; i < 1000; i++) {
mockMvc.perform(MockMvcRequestBuilders.post("/api/auth/login")
.contentType(MediaType.APPLICATION_JSON)
.content("{\"username\":\"test\" + i + \",\"password\":\"password\" + i + \"}"))
.andExpect(MockMvcResultMatchers.status().isOk());
}
long endTime = System.currentTimeMillis();
System.out.println("1000次登录请求耗时: " + (endTime - startTime) + "ms");
}
}
场景二:数据库操作压测
-- 数据库性能测试SQL
EXPLAIN ANALYZE
SELECT * FROM sys_user
WHERE status = 1
AND create_time > '2024-01-01'
ORDER BY create_time DESC
LIMIT 100;
-- 索引优化建议
CREATE INDEX idx_user_status ON sys_user(status);
CREATE INDEX idx_user_create_time ON sys_user(create_time);
场景三:文件上传压测
# 使用ab进行文件上传压测
ab -n 1000 -c 100 -p testfile.txt -T "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" http://localhost:8080/api/system/file/upload
# 使用wrk进行API压测
wrk -t12 -c400 -d30s http://localhost:8080/api/system/user/list
性能优化策略
数据库优化
// MyBatis Plus性能优化配置
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
// 性能分析插件(仅开发环境使用)
if (isDevEnvironment()) {
interceptor.addInnerInterceptor(new PerformanceInnerInterceptor());
}
return interceptor;
}
private boolean isDevEnvironment() {
return Arrays.asList(environment.getActiveProfiles()).contains("dev");
}
}
缓存优化策略
JVM调优参数
# JVM性能调优参数
java -jar maku-server.jar \
-Xms2g -Xmx4g \
-XX:NewRatio=2 \
-XX:SurvivorRatio=8 \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:InitiatingHeapOccupancyPercent=45 \
-XX:+PrintGC \
-XX:+PrintGCDetails \
-XX:+PrintGCTimeStamps \
-XX:+PrintGCDateStamps \
-XX:+PrintGCApplicationStoppedTime \
-Xloggc:gc.log
监控与告警
Prometheus监控配置
# prometheus.yml 配置
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'maku-boot'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['localhost:8080']
labels:
application: 'maku-boot'
environment: 'test'
- job_name: 'jmeter'
static_configs:
- targets: ['localhost:9270']
Grafana监控面板
{
"panels": [
{
"title": "CPU使用率",
"type": "graph",
"targets": [
{
"expr": "rate(process_cpu_seconds_total[1m]) * 100",
"legendFormat": "CPU使用率"
}
]
},
{
"title": "内存使用",
"type": "graph",
"targets": [
{
"expr": "jvm_memory_used_bytes{area=\"heap\"}",
"legendFormat": "堆内存使用"
}
]
}
]
}
压测报告模板
性能测试报告
| 测试项目 | 测试结果 | 达标情况 | 备注 |
|---|---|---|---|
| 并发用户数 | 1000用户 | ✅ 达标 | 系统稳定运行 |
| 平均响应时间 | 85ms | ✅ 优秀 | <100ms标准 |
| 95%响应时间 | 180ms | ✅ 优秀 | <200ms标准 |
| 吞吐量 | 1200 TPS | ✅ 优秀 | >1000 TPS标准 |
| CPU使用率 | 65% | ✅ 良好 | <80%标准 |
| 内存使用率 | 70% | ✅ 良好 | <85%标准 |
| 错误率 | 0.1% | ✅ 优秀 | <1%标准 |
问题排查清单
总结
通过系统的压力测试,我们可以全面评估maku-boot平台在不同负载下的性能表现。建议按照以下步骤执行:
- 环境准备:搭建与生产环境相似的测试环境
- 基准测试:先进行单用户基准测试,建立性能基线
- 负载测试:逐步增加并发用户数,观察系统表现
- 压力测试:达到系统极限,找出性能瓶颈
- 稳定性测试:长时间运行,检查内存泄漏等问题
- 优化验证:实施优化措施后重新测试验证效果
定期进行性能压测,建立性能基线,确保系统在各种业务场景下都能提供稳定可靠的服务。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



