温馨提示×

linux swagger为何卡顿

小樊
47
2026-08-31 16:42:53
栏目: 智能运维

Linux 下 Swagger 卡顿/慢通常不是单一原因,而是网络、系统资源、容器、JVM/运行环境、或 Swagger 自身配置共同作用的结果。下面按出现频率给你一个排查清单,并给出对应解决方案。


一、最常见原因(✅先检查这些)

1️⃣ Swagger UI 加载慢(网络 / DNS)

现象:

  • 页面打开很慢
  • 接口列表很久才出来
  • 浏览器转圈

常见原因:

  • Swagger UI 引用的 CDN 资源被墙或超时
  • Linux 服务器 DNS 解析慢

✅ 解决方案:

# 检查 DNS
cat /etc/resolv.conf

# 换为国内 DNS
nameserver 223.5.5.5
nameserver 114.114.114.114

或使用本地 Swagger UI(最关键):

  • 不要直接用官方 CDN
  • swagger-ui 包放到本地 /static

2️⃣ API 接口太多(Swagger 扫描慢)

现象:

  • 启动慢
  • 打开 Swagger 页面卡住
  • CPU 飙升

常见原因:

  • Controller 过多
  • 返回结构复杂(泛型、嵌套对象)
  • Swagger 扫描整个包

✅ 解决方案(Spring Boot 示例):

@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)
        .select()
        .apis(RequestHandlerSelectors.basePackage("com.xxx.controller"))
        .paths(PathSelectors.any())
        .build();
}

✅ 或排除无用接口:

.paths(PathSelectors.ant("/api/**"))

3️⃣ Linux 内存 / CPU 不足

现象:

  • Swagger 卡顿
  • 系统整体慢
  • top 看到 java / docker 占满

✅ 检查:

top
free -h

✅ 解决:

  • 增加内存
  • 限制 Swagger 扫描范围
  • 减少 JVM 内存占用(-Xmx)

4️⃣ Docker 环境问题(非常常见)

现象:

  • 本地快,Docker 里慢
  • CPU 飙高

常见原因:

  • Docker 默认内存太小
  • 没有限制 CPU

✅ 解决:

docker run -m 2g --cpus=2 ...

二、Swagger 自身问题

5️⃣ Swagger 版本 Bug

旧版本性能差。

✅ 推荐版本:

<swagger.version>3.0.0</swagger.version>

或迁移到: ✅ springdoc-openapi(更快)

<dependency>
  <groupId>org.springdoc</groupId>
  <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
  <version>2.x</version>
</dependency>

访问:

/v3/api-docs
/swagger-ui.html

6️⃣ JSON 太大(/v2/api-docs 慢)

现象:

  • 接口文档数据极大
  • 浏览器卡

✅ 解决:

  • 拆分文档
  • 关闭不必要的 model
  • 使用 Docket 过滤

三、系统级原因(Linux)

7️⃣ 文件描述符不足

ulimit -n

✅ 调大:

ulimit -n 65535

8️⃣ 磁盘 IO 慢

iostat -x 1

如果 %util 长期 100% → 磁盘瓶颈


四、快速自检清单(10 分钟)

✅ 按这个顺序排查:

  1. 浏览器 F12 → Network → 看哪个请求慢
  2. 是否使用 CDN?
  3. Swagger 扫描了多少接口?
  4. 是否在 Docker 里?
  5. 内存是否够?
  6. Swagger 版本是否过旧?

五、我可以进一步帮你精确定位

你可以直接贴出:

  • ✅ Spring Boot / .NET / Node?
  • ✅ Swagger 版本
  • ✅ 是否 Docker
  • ✅ 卡在 启动 还是 页面加载
  • ✅ top / free 输出

我可以给你一个精确到配置级别的解决方案

0