JVM 内存溢出 线上排查常用命令

本文介绍了Java性能监控的三个重要工具:jstat用于监视虚拟机的类加载、内存、垃圾收集等状态;jstack用于生成线程堆栈快照,帮助定位线程停顿原因;jmap则能生成堆转储快照并提供内存区域详细信息。这些工具在Java应用性能调优中起到关键作用。
摘要由CSDN通过智能技术生成

1.JVM Statistics Monitoring Tool (虚拟机统计信息监视工具)
jstat 是用于监视虚拟机各种运行状态信息的命令行工具,它可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、即时编译等运行时数据,是运行期定位虚拟机性能的常用工具。
jstat命令格式为:

jstat [ option vmid [interval[s|ms] [count]] ]

对于命令格式中的VMID与LVMID需要特别说明一下:如果是本地虚拟机进程,VMID与LVMID是一致的;如果是远程虚拟机进程,那VMID的格式应当是:

[protocol:][//]lvmid[@hostname[:port]/servername]

参数interval和count代表查询间隔和次数,如果省略这2个参数,说明只查询一次。假设需要每250毫秒查询一次进程2764垃圾收集状况,一共查询20次,那命令应当是:

jstat -gc 2764 250 20

选项option代表用户希望查询的虚拟机信息,主要分为三类:类加载、垃圾收集、运行期编译状况。详细请参考表4-2中的描述。
在这里插入图片描述
如何查看监视结果。监视参数与输出结果如代码清单4-1所示。

jstat -gcutil 2764 

在这里插入图片描述
查询结果表明:这台服务器的新生代Eden区(E,表示Eden)使用了6.2%的空间,2个Survivor区(S0、S1,表示Survivor0、Survivor1)里面都是空的,老年代(O,表示Old)和永久代(P,表示Permanent)则分别使用了41.42%和47.20%的空间。程序运行以来共发生Minor GC(YGC,表示YoungGC)16次,总耗时0.105秒;发生Full GC(FGC,表示Full GC)3次,总耗时(FGCT,表示Full GCTime)为0.472秒;所有GC总耗时(GCT,表示GC Time)为0.577秒。

2.jstack:Java堆栈跟踪工具
jstack (stack Trace for java)命令用于生产虚拟机当前时刻的线程快照(一般称为threaddump 或者javacore文件)。线程快照就是单前虚拟机内每一条线程**正在执行的方法堆栈的集合**,生产线程快照的目的通常是定位线程长时间停顿的原因,如线程间死锁、死循环、请求外部资源导致的长时间挂起等,都是导致线程长时间停顿的原因。线程出现停顿时,通过jstack来查看各个线程的调用堆栈,就可以获知没有响应线程到底在后台做些什么事情,或者等待什么资源。
jstack命令格式:

jstack [ option ] vmid

option选项的合法值与具体含义如表所示。
在这里插入图片描述
使用jstack查看Eclipse线程堆栈的例子,例子中的3500是通过jps命令查询到的LVMID。
在这里插入图片描述

3.jmap:Java内存映像工具
jmap(Memory Map for java)命令用于生成堆快照(一般称为heapdump或dump文件)。如果不使用jmap命令,想要获取java堆转储快照也还有一些比较“暴力”的手段:如XX: +HeapDumpOnOutOfMemoryError参数,可以让虚拟机在内存溢出的时候自动生成堆转储快照文件,通过-XX: +HeapDumpOnCtrlBreak 参数则可以使用【Ctrl】+【Break】键让虚拟机生成堆转储快照文件,又或者在Linux系统下通过kill-3命令发送进程退出信号“恐吓”一下虚拟机,也能顺利拿到堆转储快照。
jmap的作用并不仅仅是为了获取堆转储快照,他还可以查询finalize执行队列、java堆和方法区的详细信息,如空间使用率、当前用的是哪种收集器等。

jmap的作用并不仅仅是为了获取堆转储快照,它还可以查询finalize执行队列、Java堆和方法区的详细信息,如空间使用率、当前用的是哪种收集器等。

和jinfo命令一样,jmap有部分功能在Windows平台下是受限的,除了生成堆转储快照的-dump选项和用于查看每个类的实例、空间占用统计的-histo选项在所有操作系统中都可以使用之外,其余选项都只能在Linux/Solaris中使用。

jmap命令格式:

jmap [ option ] vmid

option选项的合法值与具体含义如表4-3所示。
在这里插入图片描述
使用jmap生成一个正在运行的Eclipse的堆转储快照文件的例子,例子中的3500是通过jps命令查询到的LVMID。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值