服务器jvm挂掉怎么排查,进程消失原因有哪些?

服务器上jvm挂了,最快的排查路径是:先确认进程状态和系统资源,再看jvm日志和操作系统日志,最后结合dump文件定位根因。这个过程听起来像侦探破案,但按顺序排查,往往能在几分钟内找到线索。

先分清到底是“真挂了”还是“假死了”

很多人一看到jvm没响应就慌,第一反应是重启,但重启只治标不治本,下次还得挂,动手之前,先花一分钟判断症状:

面试官问我服务宕机了如何处理? 回答直接人工重启? 面试官说基础太差?
加载中
面试官问我服务宕机了如何处理? 回答直接人工重启? 面试官说基础太差?

进程消失(真挂了)

  • 用ps -ef | grep java查看进程是否还在
  • 用top确认java进程的CPU和内存占用情况

进程还在但卡死(假死)

  • jstack命令可以打印线程快照,如果命令执行超时或直接报错,大概率是假死
  • 应用端口无法访问,但是ping能通,说明操作系统层面的网络是通的

业内专家指出,生产环境里jvm假死的出现频率比真正崩溃更高,因为jvm本身的设计非常健壮,除非是被kill -9或者操作系统层面内存不足触发了OOM Killer,否则很少直接消失。

jvm频繁full gc怎么排查这通常是假死的元凶

如果进程还在,但应用像睡着了一样,大方向先查垃圾回收,Full GC(全局垃圾回收)时jvm会暂停所有工作线程,如果full gc持续过长或过于频繁,应用就表现为假死。

(注:此小标签系统自动隐藏)

拿到GC日志先看两个数字

排查前先确认jvm启动参数里有没有打印GC日志,没有的话就是个盲盒状态,有条件的话,下次启动务必加上这些参数:

-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -Xloggc:/data/logs/gc.log

拿到日志后重点看两个指标:

服务器jvm挂掉怎么排查,进程消失原因有哪些?

  • GC频率:正常情况下,minor gc每秒几次或几秒一次,full gc一天几次或几天一次,如果full gc达到每分钟好几次,肯定是有问题的
  • GC停顿时间:单次full gc停顿超过1秒就要警惕,超过10秒基本等于应用不可用

堆内存里到底堆了什么

Full gc频繁的根源,大多是内存里的对象无法被回收,用下面命令抓一个堆内存快照:

jmap -dump:format=b,file=/data/logs/heap.hprof <pid>

然后打开MAT(Eclipse Memory Analyzer)或者VisualVM分析dump文件,优先看:

  • 哪个类的实例数量异常巨大
  • 哪个对象占据了最多的堆内存
  • 对象之间的引用链,看看是谁在“持有”它们

常见的元凶是缓存、静态集合、数据库连接没关闭、线程池队列堆积,举个例子,把数据全部加载到静态HashMap里当缓存用,数据量上来后,堆内存很容易被打满。

linux服务器jvm内存溢出问题定位从操作系统日志逆推

有时候进程直接消失,根本来不及抓dump文件,这时候操作系统日志就是第一破案现场。

dmesg和系统日志是破案关键

执行命令:

dmesg | grep -i oom

如果输出了类似Out of memory: Kill process 12345 (java),说明是操作系统把jvm给杀了,这通常发生在物理机或容器内存被全部耗尽时。

再看一下系统日志:

cat /var/log/messages | grep -i java

如果是云服务器,一般可以在控制台查看系统日志,这一条路径能快速确认两个问题:内存到底有没有耗尽,是谁耗尽了内存。

容器场景下的特殊坑

很多团队把java应用跑在docker容器里,这里有个常见的坑:

服务器jvm挂掉怎么排查,进程消失原因有哪些?

jvm默认读取的是宿主机的内存大小,而不是容器的内存限制,老版本jvm可能直接申请超过容器限额的内存,导致被强制杀掉。

排查时看两个值:

  • 容器的内存限制:docker inspect <container_id> | grep Memory
  • jvm最大堆设置:jinfo -flag MaxHeapSize <pid>

如果容器限制了2GB,但jvm最大堆竟然设了4GB,那被杀掉只是时间问题。

处理jvm异常退出不能只靠重启

搞清楚了原因,但不能每次都手动重启,线上应用需要具备自动恢复的能力,建议做三件事:

  • 配置-XX:+ExitOnOutOfMemoryError,让应用在OOM时快速退出,然后由supervisor、systemd或k8s自动拉起
  • 将jvm启动参数中的GC日志和堆内存配置写入启动脚本,避免人工遗漏
  • 设置操作系统层面的监控告警,内存指标达到阈值时提前触发通知,而不是等挂了再处理

systemd守护的配置示例

[Service]
ExecStart=/usr/bin/java -Xms2g -Xmx2g -XX:+ExitOnOutOfMemoryError -jar app.jar
Restart=always
RestartSec=10

这样可以保证jvm异常退出后,10秒内自动重启,减少业务中断时间。

从日志到源码,一步步缩小范围

有些问题从jvm本身找不到根因,比如频繁full gc和线程卡顿是由业务代码引起的,这种情况下还需要继续往下排查。

线程堆积是最容易忽视的异常信号

执行jstack <pid> > thread.txt,然后重点检查:

  • 大量线程处于BLOCKED状态,说明锁竞争严重
  • 大量线程处于WAITING状态,说明线程池配置不适配业务场景
  • 服务器jvm挂掉怎么排查,进程消失原因有哪些?

    自定义线程池的队列长度异常增长

常见的一个案例:线程池核心线程数设置太小,任务队列无限增长,导致线程处理的都是老任务,新任务排队时间越来越长,用户感觉系统挂了,但jvm确实还在运行。

连接池满了也会引发假死现象

数据库连接池满了,线程会一直等待获取连接,表现就是所有请求超时,排查方法:

netstat -an | grep 3306 | wc -l

统计数据库连接数是否超过了连接池上限,如果连接数异常偏高,同时show processlist能看到大量sleep状态的连接,基本可以断定连接池泄露。

这种情况下检查代码里所有获取连接的逻辑,确保finally块里正确释放连接,或者改用try-with-resources语法。

Q&A

进程还在但CPU跑满,是jvm挂了吗?

不一定是jvm挂了,可能是有线程在做密集计算或死循环,用top -H -p <pid>找出CPU占用最高的线程,再用jstack匹配线程id查看对应的业务代码,这种方式定位CPU问题非常高效。

jvm的堆外内存能排查吗?

可以,但相对麻烦,堆外内存(包括直接内存、元空间等)溢出时,jvm本身不会报OOM异常,而是进程被操作系统直接杀掉,排查时结合dmesg和/var/log/messages里的内存信息,同时使用-XX:MaxDirectMemorySize参数限制直接内存大小,排查这类问题一般需要结合glibc的内存分配机制,难度较高。

jvm崩溃日志去哪里找?

jvm发生致命错误时会在启动目录生成类似hs_err_pid.log的文件,里面有崩溃时的线程状态、内存使用情况、原生线程栈等内容,这个文件对于定位linux服务器上jvm崩溃类问题非常关键。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/768552.html

赞 (0)
T350服务器多少钱一台,2026年最新报价是多少?
上一篇 2026年10月20日 15:05
SuperMap虚拟机许可如何配置与管理?虚拟机许可配置步骤详解
下一篇 2026年10月20日 15:07

相关推荐

  • 广西第一次云通信热门是怎么回事?广西云通信平台哪家好用

    利用API接口将短信验证码、AI语音外呼及5G消息无缝嵌入业务系统,从而在2026年构建起高并发、低延迟的数字化客户触达闭环,随着数字经济的深入发展,传统的电话营销和纸质推广已难以满足现代企业的精细化运营需求,在广西,越来越多的中小企业开始转向云端通信解决方案,这不仅仅是技术的迭代,更是商业逻辑的重构,云通信不……

    2026年5月29日
    4600
  • aix服务器如何查看cpu内存,aix查看cpu内存命令是什么

    在AIX操作系统环境中,高效管理系统资源的关键在于精准掌握CPU与内存的实时状态,核心结论是:AIX服务器的资源监控必须依赖系统原生工具链,通过topas进行实时全局监控,利用lparstat区分物理与逻辑资源,使用svmon深入分析内存细节,三者结合才能构建完整的性能画像, 这不仅是日常运维的基本功,更是保障……

    2026年3月12日
    9300
  • 如何实现aspx与MySQL数据库的连接及常见问题解答?

    在ASP.NET Web Forms(ASPX)中连接MySQL数据库,需使用官方提供的MySQL Connector/NET驱动,以下是具体步骤和最佳实践:环境准备与驱动安装下载MySQL Connector/NET访问MySQL官网下载最新版驱动(推荐8.0+版本),专业提示:选择与.NET框架匹配的版本……

    2026年2月6日
    11800
  • 服务器单盘怎么做RAID0,有哪些步骤?

    单盘 RAID 0,风险远大于收益在绝大多数服务器场景下,单块硬盘做 RAID 0 是完全可以实现的操作,但它几乎不会带来任何性能提升,反而会把单盘故障风险无意义地放大,如果你是为了解决“服务器不认识单盘”或“阵列卡强制要求 RAID 模式”的问题,可以按下面的方法操作;如果是想靠 RAID 0 提升单盘速度……

    程序编程 2026年10月22日
    200
  • 广州稳定DDOS防御怎么防,广州高防服务器如何选择

    广州稳定DDOS防御的核心在于构建“本地近源清洗+云端弹性扩容+AI智能研判”的立体化架构,依托华南枢纽节点带宽储备与《网络安全法》合规要求,实现百G至T级攻击的秒级切换与业务零中断,2026广州DDOS攻防新态势与防御底座华南区域攻击特征演变根据国家计算机网络应急技术处理协调中心2026年最新通报,粤港澳大湾……

    2026年4月29日
    5900
  • 怎么查看网络服务器IP地址,服务器IP查询方法有哪些?

    想看网络服务器的IP地址,最直接的办法是登录服务器后执行 ip addr 或 ipconfig,查公网出口用 curl ifconfig.me,云服务器则优先在控制台看弹性公网IP,这句话能解决大部分场景,但服务器IP分内网IP和公网IP,云服务器和物理服务器查法也不一样,下面按实际运维顺序拆开讲,尽量让你照着……

    2026年10月12日
    100
  • Friendhosting万圣节VPS低至€2.99/月值得买吗,保加利亚荷兰便宜大硬盘VPS推荐

    Friendhosting 在2026年万圣节期间推出保加利亚与荷兰节点的VPS促销,荷兰节点低至€2.99/月,配备100G HDD硬盘、100Mbps带宽及无限流量,是追求高性价比存储型业务的优选方案,万圣节促销核心权益深度解析Friendhosting 此次的万圣节活动并非简单的价格下调,而是针对特定存储……

    2026年6月20日
    2500
  • AI域名去哪注册?新手如何选择靠谱便宜的注册商?

    选择权威且具备ICANN认证的顶级域名注册商是注册AI域名的核心策略,对于企业和开发者而言,{ai域名去哪注册}的答案不应仅局限于价格比较,更应关注长期的安全保障、管理便捷度以及售后服务质量,目前市场上值得信赖的渠道主要分为国际知名注册商(如Namecheap、GoDaddy)和国内头部云服务商(如阿里云、腾讯……

    2026年2月17日
    23800
  • cf登录显示网络连接服务器失败怎么办啊

    当CF登录提示“网络连接服务器失败”时,核心解决思路是检查本地网络环境、修复游戏文件或确认服务器状态,其中绝大多数情况可通过重置网络和修改DNS修复,cf登录显示网络连接服务器失败?先检查本地网络遇到登录弹窗报错,大部分人第一反应是游戏服务器炸了,但根据行业共识,超过七成的连接失败案例根源其实在本地网络,不要急……

    2026年8月13日
    1300
  • Rust进服老闪退怎么办,Rust服务器闪退原因是什么?

    Rust进服务器老是闪退,核心原因集中在游戏文件完整性、虚拟内存设置、启动参数冲突和服务器端延迟这四类问题上,多数情况下通过验证游戏文件与调整虚拟内存即可解决,我的电脑配置不差,Steam好友列表里也亮着绿色,可每次点进Rust服务器,画面刚加载到一半就”啪”地退回桌面,这种体验很让人恼火,尤其在2026年的今……

    程序编程 2026年11月4日
    000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注