在 Debian 上运行 Tomcat 时,如果发现Tomcat 自己重启(或进程被重启),常见原因可以分为 系统层、服务管理层、应用层、资源层 几类。下面按出现频率给你一个排查清单。
Debian 通常使用 systemd 管理 Tomcat。
查看服务文件:
systemctl cat tomcat9
重点看:
Restart=always
RestartSec=5
如果 Restart=always,只要 Tomcat 进程退出,systemd 就会重启它。
✅ 检查方法:
journalctl -u tomcat9 --since "1 hour ago"
如果你看到:
tomcat9.service: Main process exited, code=exited, status=1
tomcat9.service: Scheduled restart job
说明是 systemd 重启了 Tomcat,不是 Tomcat 自己重启。
这是非常常见原因。
查看内核日志:
dmesg | grep -i "killed process"
或:
journalctl -k | grep -i oom
如果看到 java 或 tomcat 被 kill,说明是 内存不足。
✅ 解决方向:
/etc/default/tomcat9
JAVA_OPTS="-Xms512m -Xmx1024m"
JVM 崩溃会生成:
/var/log/tomcat9/hs_err_pid*.log
原因可能包括:
某些错误代码:
System.exit(1);
会直接杀掉整个 Tomcat。
✅ 排查:
System.exit检查:
crontab -l
ls /etc/cron.*
有可能存在:
0 3 * * * systemctl restart tomcat9
如:
错误示例:
postrotate
kill -9 tomcat
应是用 systemctl reload 或 SIGUSR1
# 1. 看 systemd 日志
journalctl -u tomcat9 -n 200
# 2. 看内核是否 OOM
dmesg | grep -i oom
# 3. 看 Tomcat 日志
ls -lh /var/log/tomcat9/
tail -n 200 /var/log/tomcat9/catalina.out
# 4. 看服务配置
systemctl cat tomcat9
如果你愿意,可以把下面信息发我,我可以精准判断:
systemctl cat tomcat9 内容journalctl -u tomcat9 日志片段我可以直接帮你定位是 谁重启了 Tomcat。