温馨提示×

linux swagger慢怎么办

小樊
50
2026-10-09 13:14:24
栏目: 智能运维

在 Linux 环境下使用 Swagger(如 Swagger UI / Springfox / springdoc-openapi) 时,如果出现加载慢、响应慢,一般可以从下面几个方向排查和优化。


一、常见原因 & 对应解决方案

1️⃣ Swagger 扫描接口过多(最常见)

Spring 项目在启动或访问 Swagger 时,会扫描所有 Controller。

表现

  • 首次打开 Swagger UI 很慢
  • CPU 占用高
  • 接口很多(几百+)

解决 ✅ 限制扫描范围:

@EnableOpenApi
@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}
springdoc:
  packages-to-scan: com.example.controller
  paths-to-match: /api/**

或 Springfox:

.select()
.basePackage("com.example.controller")
.build();

2️⃣ Swagger UI 静态资源加载慢(Linux 服务器网络问题)

Swagger UI 默认可能从 CDN 加载 JS/CSS。

表现

  • 页面半天才出来
  • 浏览器 Network 卡在 swagger-ui-bundle.js

解决 ✅ 使用本地 Swagger UI(推荐)

springdoc 本地化

<dependency>
  <groupId>org.webjars</groupId>
  <artifactId>swagger-ui</artifactId>
</dependency>

或 Nginx 代理 CDN:

location /swagger-ui/ {
    proxy_pass https://cdn.jsdelivr.net/;
}

3️⃣ 服务器本身性能 / JVM 参数问题

Linux 服务器配置低时,Swagger 生成文档会非常吃 CPU。

解决 ✅ 增加 JVM 内存:

-Xms512m -Xmx1024m

✅ 关闭 Swagger(生产环境强烈建议):

springdoc:
  swagger-ui:
    enabled: false

或:

@Profile("!prod")

4️⃣ 接口返回体过大(Model 太复杂)

Swagger 会递归解析对象。

解决 ✅ 忽略不必要字段:

@Schema(hidden = true)
private String internalField;

✅ 使用 DTO 而不是 Entity


5️⃣ Linux 防火墙 / DNS 慢

有时 Swagger UI 卡住是因为:

  • DNS 解析慢
  • 服务器访问外网慢

验证

curl -I https://cdn.jsdelivr.net

解决

  • 禁用外网依赖
  • 使用内网镜像

6️⃣ 访问路径不对导致 404 重试

例如:

  • /swagger-ui.html 被拦截
  • Spring Security 未放行

解决

.antMatchers(
  "/swagger-ui/**",
  "/v3/api-docs/**"
).permitAll()

二、快速自检清单 ✅

# 看 CPU
top

# 看接口耗时
curl -w "%{time_total}\n" http://localhost:8080/v3/api-docs

# 看是否被墙
curl https://cdn.jsdelivr.net

三、生产环境建议(很重要)

❌ 不要长期开 Swagger
✅ 用 dev / test 环境开启
✅ 或用 Knife4j(国内更快)

<dependency>
  <groupId>com.github.xiaoymin</groupId>
  <artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
</dependency>

如果你愿意,可以告诉我:

  • 用的是 Springfox / springdoc / Knife4j
  • Linux 发行版 & 内存
  • Swagger 版本 & 接口数量

我可以直接给你针对性配置。

0 踩