java 查看堆外内存占用_java问题之2:JVM堆外内存问题排查--删除

本文详细介绍了如何排查Java应用中的堆外内存占用问题。通过使用jmap、jstat、NMT(native memory tracking)、pmap、gdb、gperf以及jemalloc等工具,分析了堆内存、线程栈、元空间等各个方面的占用情况。在实际案例中,发现dubbo的RPC调用导致大量数据传输对象,由于堆外内存无限制,从而引发内存持续增长。
摘要由CSDN通过智能技术生成

首先确认堆占用

jmap 查看heap内存使用情况

jmap -heap pid

1

可以查看到MetaspaceSize,CompressedClassSpaceSize,MaxMetaSize

jmap和jdk版本有关系,有些jdk版本会查看不到内存信息,可以使用jstat来查看统计信息

jstat 收集统计信息

jstat -gc pid 1000

1

S0C/S0U S1C/S1U EC/EU CCSC/CCSU YGC/YGCT FGC/FCGT GCT

survivor0容量和使用 survivor1容量和使用 Eden jdk8是meta,以前应该是PC,PC young gc次数和耗时 full gc次数和耗时 total gc时间

排除掉heap的问题

分析堆外情况

NMT(native memory tracking)

使用

在JVM参数中添加

-XX:NativeMemoryTracking=[off | summary | detail]

-XX:NativeMemoryTracking=detail

1

在JVM运行过程中,使用jcmd获取相关信息

jcmd pid VM.native_memory [summary | detail | baseline | summary.diff | detail.diff | shutdown] [scale= KB | MB | GB]

jcmd pid VM.native_memory detail

1

baseline个基准,之后会输出diff参数,来和这个基线版本进行比较,可以两次的内存差

N

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值