温馨提示×

Swagger Linux怎么优化

小樊
46
2026-08-05 21:51:05
栏目: 智能运维

针对 Swagger(OpenAPI)在 Linux 服务器上的“优化”,通常可以从 性能、内存、访问安全、文档体积、部署方式 等几个维度来做。下面按常见场景给你一套实用优化方案。


一、Swagger UI 访问慢 / 启动慢(最常见)

1️⃣ 禁用不必要的 Swagger 能力

如果你用的是 Spring Boot + Swagger / springdoc-openapi

springdoc:
  api-docs:
    enabled: false        # 线上关闭 /v3/api-docs
  swagger-ui:
    enabled: false        # 线上关闭 swagger-ui

或按环境控制:

spring:
  profiles: prod
springdoc:
  api-docs:
    enabled: false

效果:减少反射、JSON 生成、内存占用


2️⃣ 减少接口扫描范围(非常重要)

@OpenAPIDefinition(
  info = @Info(title = "API", version = "1.0")
)
public class OpenApiConfig {

    @Bean
    public GroupedOpenApi publicApi() {
        return GroupedOpenApi.builder()
            .group("public")
            .pathsToMatch("/api/**")
            .build();
    }
}

❌ 避免扫描:

  • /actuator/**
  • /error
  • 内部接口

效果

  • 启动快
  • JSON 小
  • CPU 占用低

二、Swagger JSON 太大(Linux 内存 / CPU 飙高)

3️⃣ 精简 Model / 忽略字段

@Schema(hidden = true)
public class InternalModel {
    private String secret;
}

或:

@JsonIgnore
private String password;

✅ 减少无用字段序列化


4️⃣ 关闭 Example 生成(非常吃性能)

springdoc:
  model-converters:
    deprecating-converter:
      enabled: false

或 Java:

springdoc.api-docs.enabled=false

三、Linux 部署层面的优化

5️⃣ 使用 Nginx 托管 Swagger UI(强烈推荐)

不要直接访问后端 Swagger

✅ 做法:

  • 后端只提供 /v3/api-docs
  • Swagger UI 用 Nginx 静态托管
server {
    listen 80;
    server_name api.example.com;

    location /swagger/ {
        root /usr/share/nginx/html;
        index index.html;
    }

    location /v3/api-docs {
        proxy_pass http://127.0.0.1:8080;
    }
}

✅ 好处:

  • 减少后端压力
  • 并发能力更强
  • 更安全

6️⃣ Linux 文件描述符 & 连接数优化

ulimit -n 65535

/etc/security/limits.conf

* soft nofile 65535
* hard nofile 65535

四、Swagger 安全 & 生产环境优化(非常重要)

7️⃣ 生产环境禁止 Swagger 访问

✅ 方案一:Nginx 拦截

location /swagger-ui {
    deny all;
}

✅ 方案二:Spring Security

@Override
protected void configure(HttpSecurity http) {
    http
      .authorizeRequests()
      .antMatchers("/swagger-ui/**", "/v3/api-docs/**")
      .hasRole("ADMIN");
}

五、JVM & Linux 性能优化(Swagger 很吃反射)

8️⃣ JVM 参数优化

-Xms512m
-Xmx1024m
-XX:+UseG1GC

✅ 避免频繁 Full GC


六、Swagger 替代方案(终极优化)

如果你只是 内部文档 / 对外接口说明

场景 建议
性能敏感 只保留 /v3/api-docs
对外 API 用 Apifox / YApi
高并发 完全关闭 Swagger UI
微服务 用 Gateway 聚合文档

七、快速检查清单 ✅

✅ 是否只在 dev / test 开启 Swagger
✅ 是否扫描了不必要的接口
✅ 是否用 Nginx 托管 UI
✅ 是否关闭 example / model 自动生成
✅ 是否限制访问权限


八、如果你愿意,我可以帮你:

  • ✅ 分析 你当前的 Swagger 配置
  • ✅ 判断是 CPU / 内存 / IO 问题
  • ✅ 给你 针对你项目的优化方案
  • ✅ 帮你从 Swagger 切换到 springdoc / Knife4j / Apifox

你可以直接贴:

  • 使用的 Swagger 版本
  • Linux 环境(Docker / 物理机)
  • 是否 Spring Boot
  • 具体“慢 / 卡 / 内存高”的现象

0