温馨提示×

温馨提示×

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

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

java tomcat为什么宕机

发布时间:2026-10-13 03:55:04 来源:亿速云 阅读:88 作者:小樊 栏目:编程语言

Java 应用部署在 Tomcat 上发生“宕机”(无法访问、进程退出、卡死等),常见原因可以归类为下面几类,你可以按图索骥排查。


一、JVM 层面问题(最常见)

1. OutOfMemoryError(OOM)

Tomcat 进程直接挂掉或假死。

常见类型:

  • Java heap space:堆内存不足
  • GC overhead limit exceeded:频繁 GC
  • PermGen space / Metaspace:类加载过多
  • Unable to create new native thread:线程数过多

排查:

# 看是否有 OOM 日志
catalina.out
hs_err_pid*.log

解决:

  • 调整 JVM 参数:
-Xms512m -Xmx1024m
-XX:MetaspaceSize=256m

2. 频繁 Full GC / STW

现象:

  • 服务偶尔卡死
  • 请求超时
  • 最后 Tomcat 无响应

排查:

jstat -gcutil <pid> 1000

二、Tomcat 配置问题

3. 线程池耗尽

<Connector port="8080" maxThreads="200" />
  • 请求量 > 最大线程数
  • 连接一直被占着不释放

现象:

  • 新请求一直等待
  • 看起来像“宕机”

解决:

  • 增大 maxThreads
  • 检查代码是否有慢 SQL / 死循环 / 同步阻塞

4. 连接数 / 超时配置不合理

connectionTimeout="20000"
acceptCount="100"

高并发下容易被打死。


三、代码问题(非常常见)

5. 死锁 / 死循环

  • 多线程竞争资源
  • synchronized 使用不当

排查:

jstack <pid> > thread.txt

看有没有:

  • BLOCKED
  • deadlock

6. 内存泄漏

  • 静态集合无限增长
  • ThreadLocal 未清理
  • 数据库连接未关闭

四、系统资源问题

7. 服务器资源耗尽

  • CPU 100%
  • 内存不足被 OS 杀掉(OOM Killer)

排查:

top
free -m
dmesg | grep kill

8. 磁盘满了

  • 日志写不进去
  • Tomcat 直接挂
df -h

五、外部依赖问题

9. 数据库 / Redis / 第三方接口

  • 数据库连接池耗尽
  • Redis 阻塞
  • 外部接口超时

导致 Tomcat 线程全部卡住。


六、部署 & 运维问题

10. 部署方式错误

  • war 包冲突
  • 多实例端口冲突
  • 热部署导致类加载异常

七、快速排查清单 ✅

  1. 看 Tomcat 是否还在进程
ps -ef | grep tomcat
  1. 看日志
catalina.out
localhost.log
  1. 看 JVM
jps
jstat
jstack
  1. 看系统
top
df -h

如果你愿意

你可以把下面信息发我,我可以更精准判断:

  • Tomcat 版本
  • JDK 版本
  • 宕机时的日志(关键报错)
  • 是否高并发
  • 是否 OOM 或进程直接消失

我可以帮你定位是代码问题还是配置问题。

向AI问一下细节

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

AI
助
手