maku-boot压力测试:系统性能压测方案

maku-boot压力测试:系统性能压测方案

【免费下载链接】maku-boot 「企业级低代码平台」前后端分离架构 SpringBoot3.5、SpringSecurity6.5、Mybatis-Plus、Vue3、Element-Plus等技术开发的低代码开发平台,旨在为开发者提供一个简洁、高效、可扩展的低代码开发平台。使用门槛极低,支持国密加密、达梦数据库等,符合信创需求的低代码开发平台。 【免费下载链接】maku-boot 项目地址: https://gitcode.com/makunet/maku-boot

概述

在企业级应用开发中,性能测试是确保系统稳定性和可靠性的关键环节。maku-boot作为基于SpringBoot 3.5的企业级低代码平台,承载着复杂的业务逻辑和高并发场景。本文将详细介绍maku-boot系统的性能压测方案,帮助开发者全面评估系统性能表现。

压测环境配置

硬件环境要求

组件推荐配置最低配置
CPU8核以上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)
}

关键性能指标

响应时间指标

mermaid

性能指标优秀良好一般较差
平均响应时间<100ms100-300ms300-1000ms>1000ms
95%响应时间<200ms200-500ms500-2000ms>2000ms
99%响应时间<500ms500-1000ms1000-3000ms>3000ms
吞吐量>1000 TPS500-1000 TPS100-500 TPS<100 TPS

系统资源指标

mermaid

压测场景设计

场景一:用户登录压测

// 登录接口性能测试代码示例
@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");
    }
}

缓存优化策略

mermaid

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%标准

问题排查清单

mermaid

总结

通过系统的压力测试,我们可以全面评估maku-boot平台在不同负载下的性能表现。建议按照以下步骤执行:

  1. 环境准备:搭建与生产环境相似的测试环境
  2. 基准测试:先进行单用户基准测试,建立性能基线
  3. 负载测试:逐步增加并发用户数,观察系统表现
  4. 压力测试:达到系统极限,找出性能瓶颈
  5. 稳定性测试:长时间运行,检查内存泄漏等问题
  6. 优化验证:实施优化措施后重新测试验证效果

定期进行性能压测,建立性能基线,确保系统在各种业务场景下都能提供稳定可靠的服务。

【免费下载链接】maku-boot 「企业级低代码平台」前后端分离架构 SpringBoot3.5、SpringSecurity6.5、Mybatis-Plus、Vue3、Element-Plus等技术开发的低代码开发平台,旨在为开发者提供一个简洁、高效、可扩展的低代码开发平台。使用门槛极低,支持国密加密、达梦数据库等,符合信创需求的低代码开发平台。 【免费下载链接】maku-boot 项目地址: https://gitcode.com/makunet/maku-boot

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

抵扣说明:

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

余额充值