Jvm正在使用的内存比本机内存跟踪所说的要多,我该如何定位额外的内存去向?
Jvm正在使用的内存比本机内存跟踪所说的要多,我该如何定位额外的内存去向?
我在我的Web服务器上运行着Jetty。我的当前JVM设置是:-Xmx4g -Xms2g,然而Jetty使用了更多的内存,我不知道这些额外的内存去了哪里。\nJetty总共使用了4.547g的内存:\n\n堆内存使用情况显示堆内存使用量为2.5g:\n
堆内存使用情况: 新生代(Eden + 1个幸存者空间): 容量 = 483196928(460.8125MB) 已用 = 277626712(264.76546478271484MB) 空闲 = 205570216(196.04703521728516MB) 使用率57.45622455612963% Eden空间: 容量 = 429522944(409.625MB) 已用 = 251267840(239.627685546875MB) 空闲 = 178255104(169.997314453125MB) 使用率58.4992824038755% From空间: 容量 = 53673984(51.1875MB) 已用 = 26358872(25.137779235839844MB) 空闲 = 27315112(26.049720764160156MB) 使用率49.109214624351345% To空间: 容量 = 53673984(51.1875MB) 已用 = 0(0.0MB) 空闲 = 53673984(51.1875MB) 使用率0.0% 并发标记-清除代: 容量 = 2166849536(2066.46875MB) 已用 = 1317710872(1256.6670150756836MB) 空闲 = 849138664(809.8017349243164MB) 使用率60.81229222922842%
\n仍然缺少2g内存,然后我使用了原生内存追踪,它显示:\n
总计:已预留=5986478KB,已分配=3259678KB - Java堆(已预留=4194304KB,已分配=2640352KB) (mmap:已预留=4194304KB,已分配=2640352KB) - 类(已预留=1159154KB,已分配=122778KB) (类数=18260) (malloc=4082KB #62204) (mmap:已预留=1155072KB,已分配=118696KB) - 线程(已预留=145568KB,已分配=145568KB) (线程数=141) (堆栈:已预留=143920KB,已分配=143920KB) (malloc=461KB #707) (arena=1187KB #280) - 代码(已预留=275048KB,已分配=143620KB) (malloc=25448KB #30875) (mmap:已预留=249600KB,已分配=118172KB) - 垃圾收集(已预留=25836KB,已分配=20792KB) (malloc=11492KB #1615) (mmap:已预留=14344KB,已分配=9300KB) - 编译器(已预留=583KB,已分配=583KB) (malloc=453KB #769) (arena=131KB #3) - 内部(已预留=76399KB,已分配=76399KB) (malloc=76367KB #25878) (mmap:已预留=32KB,已分配=32KB) - 符号(已预留=21603KB,已分配=21603KB) (malloc=17791KB #201952) (arena=3812KB #1) - 原生内存追踪(已预留=5096KB,已分配=5096KB) (malloc=22KB #261) (追踪开销=5074KB) - Arena块(已预留=190KB,已分配=190KB) (malloc=190KB) - 未知(已预留=82696KB,已分配=82696KB) (mmap:已预留=82696KB,已分配=82696KB)
\n仍然没有解释内存去了哪里,有人能够说明一下如何找到这些缺失的内存吗?