百度
360搜索
搜狗搜索

linux定位jvm内存溢出命令详细介绍

在 Linux 系统中定位 JVM 内存溢出问题,可通过以下命令和工具组合实现:

1. 查找目标 Java 进程(jps

首先确定目标 Java 进程的 PID(进程 ID):
bash

jps  

输出示例:
plaintext

12345 com.example.MyApp # 其中 12345 是进程 PID

2. 查看 JVM 内存使用概况(jstat

使用 jstat 监控堆内存各区域(Young、Old、Perm 等)的使用情况,判断是否存在内存持续增长或无法回收的情况:
bash

jstat  PID  

关键指标:

  • S0CS1C:Survivor 区大小
  • Eden:Eden 区大小
  • Old:老年代大小
  • MC:元空间(Metaspace)大小
  • GC 次数耗时:若 Full GC 频繁且内存未下降,可能是内存泄漏。

3. 生成堆转储文件(jmap

当确认内存溢出时,通过 jmap 生成堆转储(Heap Dump)文件,用于后续分析:
bash

jmap b,fileheapdump.bin PID 

文件路径建议存放在有足够空间的目录(如 /tmp)。

4. 分析堆转储文件(jhat/VisualVM/Eclipse Memory Analyzer

  • jhat(命令行工具,内置):bash
    jhat heapdump.bin 

  • VisualVM(图形化工具):bash
    jvisualvm  

  • Eclipse Memory Analyzer(MAT):下载并解压后直接打开堆转储文件,定位大对象或泄漏点。

5. 查看线程状态(jstack

排查是否存在线程死锁或异常阻塞,间接辅助内存问题定位:
bash

jstack PID  thread.log 

检查日志中是否有 BLOCKEDWAITING 状态的线程,结合业务逻辑分析是否存在资源竞争。

6. 结合系统监控(top/free/vmstat

  • top -p PID:实时监控 Java 进程的 CPU、内存占用率。
  • free -h:查看系统物理内存和交换空间使用情况,判断是否因内存不足导致 JVM 频繁 GC。
  • vmstat 1:分析系统级内存、CPU、磁盘 I/O 的整体状态,确认是否存在资源瓶颈。

操作流程总结

  1. 通过 jps 确定目标进程 PID。
  2. jstat 监控 GC 行为,确认内存是否持续增长。
  3. 发现异常后,用 jmap 生成堆转储文件。
  4. 使用 MATVisualVM 分析堆文件,定位大对象或泄漏点。
    5. 结合 jstack 分析线程状态,排除线程相关问题。
    6. 通过系统监控命令确认硬件资源是否充足。

注意事项

  • 生产环境操作:生成堆转储文件可能占用大量磁盘空间,建议先在测试环境复现问题。
  • 内存溢出日志:检查 JVM 启动参数是否配置了 -XX:+HeapDumpOnOutOfMemoryError,以便自动生成堆转储文件:bash
      /path/to/dump.jar MyApp

    912java :+HeapDumpOnOutOfMemoryError =/path/to/dump.jar MyApp

通过以上步骤,可逐步定位 JVM 内存溢出的具体原因(如大对象创建、内存泄漏、GC 配置不合理等)。

阅读更多 >>>  linux系统怎么查看系统配置

网站数据信息

"linux定位jvm内存溢出命令"浏览人数已经达到19次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:linux定位jvm内存溢出命令的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!