温馨提示×

Linux跑Swagger慢怎么破

小樊
38
2026-08-21 04:45:57
栏目: 智能运维

Linux 上跑 Swagger(Swagger UI / springfox / springdoc-openapi)很慢,通常不是“Swagger 本身慢”,而是环境 + 配置 + 扫描方式的问题。下面按最常见 → 次常见给你一套排查与优化方案。


一、最常见原因 & 解决方案

1️⃣ Linux 下 DNS 反向解析导致启动慢(非常常见)

现象

  • 启动 Swagger / 应用要很久
  • 访问接口也慢
  • 卡在:
    • InetAddress.getLocalHost
    • 或日志里一堆 DNS 相关

原因 Linux 默认会做 hostname → IP 的反向解析

解决

# 查看 hostname
hostname

# 编辑 hosts
sudo vim /etc/hosts

保证有这一行(非常重要):

127.0.0.1   localhost
127.0.0.1   your-hostname

✅ 改完立刻生效,重启应用即可


2️⃣ Swagger 扫描包太大(Spring Boot 最常见)

现象

  • 启动慢
  • 打开 /swagger-ui.html
  • CPU 飙高

原因 Springfox / springdoc 会扫描:

  • Controller
  • Model
  • 泛型
  • 继承关系

解决(强烈推荐)

✅ 限制扫描包

@Bean
public GroupedOpenApi api() {
    return GroupedOpenApi.builder()
        .group("user-api")
        .packagesToScan("com.xxx.user.controller")
        .build();
}

或(springfox):

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

❌ 不要扫 com.xxx


3️⃣ 用 springfox 但版本太老(性能差)

springfox 已知问题

  • 启动慢
  • 内存占用高
  • 泛型解析爆炸

最佳实践:换 springdoc-openapi

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

✅ 优点:

  • 启动快
  • 内存小
  • Swagger UI 加载快

4️⃣ Linux 内存小 / 开了太多服务

现象

  • 启动慢
  • 访问卡
  • GC 频繁

排查

free -h
top
jstat -gc pid

解决

  • 给 JVM 合理内存
-Xms512m -Xmx1024m
  • 不要同时跑:
    • IDEA
    • Docker
    • ES
    • MySQL

二、Swagger UI 访问慢(不是启动慢)

5️⃣ Swagger UI 从国外 CDN 加载

现象

  • 页面卡在 swagger-ui-bundle.js
  • 国内网络慢

解决:本地化 Swagger UI

✅ springdoc 本地 UI

springdoc:
  swagger-ui:
    path: /swagger-ui.html

或手动引入本地 JS(进阶)


6️⃣ 接口 / Model 太多

优化建议

  • 拆分组
GroupedOpenApi.builder()
    .group("order")
    .pathsToMatch("/order/**")
  • 关闭不常用功能
springdoc:
  api-docs:
    enabled: true
  swagger-ui:
    enabled: true

三、快速自检清单 ✅

你可以按顺序对照:

  • [ ] /etc/hosts 是否配置正确
  • [ ] Swagger 是否只扫 controller 包
  • [ ] 是否还在用 springfox
  • [ ] Linux 内存是否够
  • [ ] 是否 DNS 反向解析卡住
  • [ ] 是否接口数量过多

四、我可以直接帮你定位

你可以直接贴:

  1. ✅ Linux 发行版(CentOS / Ubuntu / Alpine)
  2. ✅ Java / Spring Boot 版本
  3. ✅ 用的是 springfox 还是 springdoc
  4. ✅ 启动日志(前 30 行)
  5. top / free -h 输出

我可以 直接告诉你哪一步最慢、怎么改

0