温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java tomcat为什么启动慢

发布时间:2026-09-22 13:22:58 来源:亿速云 阅读:88 作者:小樊 栏目:编程语言

Java 的 Tomcat 启动时“慢”是一个很常见的问题,原因通常可以归为配置、资源、应用本身、环境几类。下面按最常见 → 较少见的顺序说明,并给出排查/解决思路。


一、最常见原因(90% 情况)

1️⃣ Web 应用太多 / 应用本身启动慢

Tomcat 启动慢,通常不是 Tomcat 本身,而是部署的应用慢。

常见情况:

  • @PostConstruct / ServletContextListener 中做了:
    • 连接数据库
    • 加载大量数据到内存
    • 初始化缓存(Redis、本地 Map)
  • Spring / Spring Boot 扫描包过多
  • 应用启动时就发 HTTP 请求、RPC 调用

✅ 排查方法:

# 查看启动日志,看卡在哪一步
catalina.out

✅ 解决:

  • 延迟初始化(懒加载)
  • 减少启动期同步操作
  • 使用 @Lazy

2️⃣ 熵池不足(Linux 上非常常见)⭐⭐⭐

Tomcat / Spring 启动时会使用 随机数(SecureRandom)

Linux 默认:

/dev/random

熵不够时会阻塞等待,导致启动特别慢(几十秒甚至几分钟)

✅ 典型表现:

  • 卡在 SessionIdGenerator
  • 日志里有 Creation of SecureRandom instance

✅ 解决方案(强烈推荐): 修改 catalina.sh 或 JAVA_OPTS:

-Djava.security.egd=file:/dev/./urandom

或:

yum install rng-tools
systemctl start rngd

3️⃣ JVM 参数不合理 / 内存太小

  • 堆内存太小 → 频繁 GC
  • 启动时大量类加载 → Full GC

✅ 查看:

jstat -gcutil <pid> 1000

✅ 建议:

-Xms512m -Xmx1024m

二、Tomcat 自身配置原因

4️⃣ 自动部署 / 扫描太慢

Tomcat 默认会:

  • 扫描所有 jar 的 META-INF
  • 自动部署 webapps 下所有目录

✅ 优化: conf/server.xml

<Host name="localhost" appBase="webapps"
      unpackWARs="true" autoDeploy="false">

5️⃣ Jar 扫描(JarScanner)

Tomcat 会扫描大量 jar(尤其 Spring Boot 的 fat jar)

✅ 优化: conf/catalina.properties

org.apache.catalina.startup.ContextConfig.jarsToSkip=*

三、网络 & 环境原因

6️⃣ 域名解析慢(DNS)

Tomcat 启动时会:

  • 获取主机名
  • 反向 DNS 解析

✅ 解决: /etc/hosts

127.0.0.1   localhost your-hostname

7️⃣ 数据库连接慢

  • 数据源初始化时连接数据库
  • 数据库不通 → 超时重试

✅ 表现: 卡在 DataSource 初始化

✅ 解决:

  • 延迟连接
  • 设置连接超时

四、少见但容易踩坑

原因 说明
杀毒软件 Windows 下扫描 jar
磁盘 IO 慢 云服务器低配磁盘
多个 Tomcat 端口冲突 启动重试
使用 IDE 调试 本身就会慢

五、快速自检清单 ✅

你可以按顺序确认:

  1. ✅ 是否卡在 SecureRandom → 用 urandom
  2. ✅ webapps 是否太多 → 清空测试
  3. ✅ 是否应用启动做重活
  4. ✅ JVM 内存是否太小
  5. ✅ 是否是 Linux 服务器

如果你愿意,可以:

  • 贴一段 启动日志
  • 或说明 卡在哪一行

我可以直接帮你精确定位“慢在哪”。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手