温馨提示×

为什么Debian Tomcat宕机

小樊
48
2026-09-24 19:12:33
栏目: 智能运维

Debian 上的 Tomcat“宕机”(无法访问、进程消失、卡死等)通常不是单一原因,而是系统资源、配置、应用、或外部因素叠加导致。下面按最常见原因 → 排查方法 → 解决建议系统说明。


一、最常见原因分类

1️⃣ 内存不足(OOM,最常见)

现象

  • Tomcat 进程突然消失
  • 日志最后出现 java.lang.OutOfMemoryError
  • dmesg 中有 Out of memory: Kill process

原因

  • JVM 堆内存设置过小
  • 内存泄漏(session、线程、连接未释放)
  • 系统总内存不足

排查

dmesg | grep -i kill
journalctl -u tomcat

解决

  • 调整 JAVA_OPTS:
-Xms512m -Xmx1024m
  • 限制系统其他进程内存
  • 排查应用内存泄漏

2️⃣ 磁盘空间耗尽

现象

  • Tomcat 启动失败或运行中崩溃
  • 日志无法写入

排查

df -h
du -sh /var/log/tomcat*

解决

  • 清理日志
  • 配置 logrotate
  • 增大磁盘或分区

3️⃣ systemd 限制(Debian 特有)

现象

  • 服务自动停止
  • systemctl status tomcat 显示 code=killed

可能原因

  • CPU / 内存限制
  • 文件描述符不足

排查

systemctl status tomcat
journalctl -u tomcat

解决 编辑:

/etc/systemd/system/tomcat.service

增加:

LimitNOFILE=65535
LimitNPROC=4096

然后:

systemctl daemon-reload
systemctl restart tomcat

4️⃣ 端口被占用 / 启动失败

现象

  • Tomcat 起不来
  • 日志显示 Address already in use

排查

ss -tlnp | grep 8080

解决

  • 杀掉占用进程
  • 修改 server.xml 端口

5️⃣ 应用自身 bug / 死锁

现象

  • Tomcat 在但页面无响应
  • CPU 100%

排查

top
jstack <pid>

解决

  • 分析线程栈
  • 修复死锁或无限循环

6️⃣ Debian 自动更新导致重启

现象

  • 半夜突然宕机
  • 系统刚更新过

排查

less /var/log/apt/history.log

解决

  • 禁用自动重启
  • 使用 unattended-upgrades 谨慎配置

二、标准排查顺序(推荐)

# 1. 看进程状态
systemctl status tomcat

# 2. 看系统日志
journalctl -u tomcat -b

# 3. 看内核是否杀进程
dmesg | grep -i oom

# 4. 看磁盘
df -h

# 5. 看 Tomcat 日志
/var/log/tomcat*/catalina.out

三、如何避免再次宕机

✅ 合理设置 JVM 内存
✅ 配置 systemd 资源限制
✅ 日志轮转
✅ 监控(Prometheus / Zabbix)
✅ 定期重启(非最优但有效)


如果你愿意,可以贴出:

  • Debian 版本
  • Tomcat 版本
  • catalina.out 最后 50 行
  • systemctl status tomcat 输出

我可以帮你精确定位是哪一种宕机原因。

0 踩