可以看出,最下面一行是堆内存的映射,占用4G,其他上面有非常多小的内存占用,不过通过这些信息我们依然看不出问题 。
堆外内存跟踪 NativeMemoryTracking
?NMT必须先通过VM启动参数中打开,不过要注意的是,打开NMT会带来5%-10%的性能损耗 。
Native Memory Tracking (NMT) 是Hotspot VM用来分析VM内部内存使用情况的一个功能 。我们可以利用jcmd(jdk自带)这个工具来访问NMT的数据 。
?
-XX:NativeMemoryTracking=[off | summary | detail]# off: 默认关闭# summary: 只统计各个分类的内存使用情况.# detail: Collect memory usage by individual call sites.
然后运行进程,可以使用下面的命令查看直接内存:jcmd <pid> VM.native_memory [summary | detail | baseline | summary.diff | detail.diff | shutdown] [scale= KB | MB | GB] # summary: 分类内存使用情况.# detail: 详细内存使用情况,除了summary信息之外还包含了虚拟内存使用情况 。# baseline: 创建内存使用快照,方便和后面做对比# summary.diff: 和上一次baseline的summary对比# detail.diff: 和上一次baseline的detail对比# shutdown: 关闭NMT
我们使用:jcmd pid VM.native_memory detail scale=MB > temp.txt
得到如图结果:文章插图
文章插图
上图中给我们的信息,都不能很明显的看出问题,至少我当时依然不能通过这几次信息看出问题 。
排查似乎陷入了僵局 。
山重水复疑无路在排查陷入停滞的时候,我们得到了来自WCS和SCF方面的回复,「两方都确定了他们的封装没有内存泄漏的存在」,WCS方面没有使用直接内存,而SCF虽然作为底层RPC协议,但是也不会遗留这么明显的内存bug,否则应该线上有很多反馈 。
查看JVM内存信息 jmap此时,找不到问题的我再次新开了一个沙箱容器,运行服务进程,然后运行jmap命令,看一看JVM内存的「实际配置」:
jmap -heap pid
得到结果:Attaching to process ID 1474, please wait...Debugger attached successfully.Server compiler detected.JVM version is 25.66-b17using parallel threads in the new generation.using thread-local object allocation.Concurrent Mark-Sweep GCHeap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 4294967296 (4096.0MB) NewSize = 2147483648 (2048.0MB) MaxNewSize = 2147483648 (2048.0MB) OldSize = 2147483648 (2048.0MB) NewRatio = 2 SurvivorRatio = 8 MetaspaceSize = 21807104 (20.796875MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 0 (0.0MB)Heap Usage:New Generation (Eden + 1 Survivor Space): capacity = 1932787712 (1843.25MB) used = 1698208480 (1619.5378112792969MB) free = 234579232 (223.71218872070312MB) 87.86316621615607% usedEden Space: capacity = 1718091776 (1638.5MB) used = 1690833680 (1612.504653930664MB) free = 27258096 (25.995346069335938MB) 98.41346682518548% usedFrom Space: capacity = 214695936 (204.75MB) used = 7374800 (7.0331573486328125MB) free = 207321136 (197.7168426513672MB) 3.4349974840697497% usedTo Space: capacity = 214695936 (204.75MB) used = 0 (0.0MB) free = 214695936 (204.75MB) 0.0% usedconcurrent mark-sweep generation: capacity = 2147483648 (2048.0MB) used = 322602776 (307.6579818725586MB) free = 1824880872 (1740.3420181274414MB) 15.022362396121025% used29425 interned Strings occupying 3202824 bytes
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 皇菊花茶的功效与禁忌,菊花茶的禁忌与功效作用
- 监控Redis?使用Grafana的Source插件轻松搞定
- 大浪淘沙的古诗原文 浪淘沙借问长江与海水古诗
- 荀攸是荀彧的什么人 荀彧为曹操出的第一个计谋是
- 房子大了,设备多了,家里的WiFi网络该怎么优化?
- 安史之乱有多吓人 安禄山怎么死的(安禄山叛乱为什么失败)
- 在日本的中国文物 日本有哪些中国失传的古籍
- 汉朝的都城分别在哪里 汉朝首都在哪个城市
- 红楼梦中的袭人姓什么? 红楼梦袭人名字含义
- 赌书消得泼茶香当时只道是寻常中的典故出自哪位文人 赌书消得泼茶香,只道当时是寻常