进程被系统强制终止,最常见原因是oom killer静默杀掉:执行sudo dmesg -t | grep -i "killed process"确认,若输出含“out of memory”即证实内存不足导致;其次检查jvm参数语法错误(如空格、冲突gc配置)或yaml配置解析失败。

进程启动后立即消失,但 nohup.out 或控制台没报错
这种情况大概率不是 Java 应用自身抛异常退出,而是被系统或 JVM 层面强制终止。nohup 只屏蔽 SIGHUP,对 SIGKILL(137)、SIGTERM(143)完全无效。
先确认是否真“没报错”:
- 检查
nohup.out文件末尾有没有被截断——可能日志写到一半进程就被杀了 - 用
journalctl -u your-service --since "2 hours ago"查 systemd 日志(如果用了 service) - 直接运行不加
nohup:java -jar app.jar,看终端是否闪退并残留最后一行输出 - 加
-XX:+PrintGCDetails -XX:+PrintGCDateStamps,哪怕只打出一行 GC 日志,也能证明 JVM 至少跑到了初始化阶段
查系统级 OOM Killer 日志(最常见原因)
Linux 内核在内存严重不足时会静默杀掉占用内存最大的进程,不走 JVM 异常流程,也不写 Java 日志,只在 dmesg 留痕迹。
执行:
sudo dmesg -T | grep -i "killed process"
如果看到类似:
[Tue Oct 15 06:22:34 2026] Out of memory: Kill process 12345 (java) score 892 or sacrifice child
那就坐实了——不是代码问题,是物理内存不够或 JVM 堆设太大。
进一步验证:
-
free -h看可用内存是否长期低于 500MB cat /proc/meminfo | grep -E "MemAvailable|MemFree"- 检查 JVM 参数是否越界:比如机器只有 4G 内存,却配了
-Xmx6g
检查 JVM 启动参数是否语法错误或冲突
JVM 遇到无法解析的参数(比如拼错、多空格、混用旧参数)会直接退出,且默认不输出任何提示,exit code 通常为 1。
典型错误:
-
-Xms2g -Xmx 4g(-Xmx后多了一个空格)→ JVM 启动失败 -
-XX:+UseG1GC -XX:+UseParallelGC(两种 GC 策略同时启用)→ 冲突退出 -
-Dfile.encoding=UTF-8 -Dspring.profiles.active=prod中某个值含未转义的特殊字符(如&)→ shell 解析中断
排查方法:
- 用
java -version确认 JDK 可用 - 把启动命令拆开,逐段测试:
java -Xms2g -Xmx2g -version→ 成功再加-XX:+UseG1GC→ 再加-jar - 加
-verbose:jni或-XX:+PrintCommandLineFlags,看 JVM 是否能正常解析参数
Spring Boot 启动后秒退但无日志?重点看配置加载阶段
Spring Boot 在 ApplicationContext 初始化前就挂掉,不会打 “Starting Spring Application” 这类日志,但可能卡在配置解析环节。
常见触发点:
-
application.yml有语法错误(如缩进错、冒号后少空格),导致YamlPropertySourceLoader解析失败 → 静默退出 - 使用了
@ConfigurationProperties绑定类,但字段类型与 YAML 值不兼容(如把"true"绑定到int字段)→BeanCreationException但没来得及打印 - 外部配置文件路径错误,且
spring.config.location指向不存在目录 → 某些版本会直接 fail fast
临时解决办法:
- 删掉所有外部
spring.config.location,只留 classpath 下的application.yml - 改用
application.properties(语法更容错)测试是否 YAML 解析问题 - 加 JVM 参数
-Dlogging.level.org.springframework=DEBUG,看是否在 early refresh 阶段就崩了
真正难排查的,往往不是堆栈里明晃晃的 NullPointerException,而是那些连日志都来不及刷就消失的退出——它们藏在 dmesg 里、藏在参数空格里、藏在 YAML 缩进里。动手前,先别急着改代码,看看系统有没有悄悄把你进程 kill 掉。











