堆转储分析中的问题-Java 8

堆转储分析中的问题-Java 8,java,memory-management,garbage-collection,Java,Memory Management,Garbage Collection,我们在服务器(tomcat 8.0.33)上观察到90%的堆内存使用率,并开始分析(在使用jmap-dump:format=b命令进行堆转储之后) 详细信息- 服务器操作系统-Linux 应用服务器-tomcat 8.0.33 服务器上的总内存-16 GB Xms和Xmx值-8 GB 使用的堆内存-7.8 GB Jstat-gc输出- 顶部命令输出- 可视虚拟机总内存- 可视虚拟机详细信息- 今天的GC日志: 2016-11-02T00:16:58.013-0400: 179165

我们在服务器(tomcat 8.0.33)上观察到90%的堆内存使用率,并开始分析(在使用
jmap-dump:format=b
命令进行堆转储之后)

详细信息-

  • 服务器操作系统-Linux
  • 应用服务器-tomcat 8.0.33
  • 服务器上的总内存-16 GB
  • Xms和Xmx值-8 GB
  • 使用的堆内存-7.8 GB
Jstat-gc输出-

顶部命令输出-

可视虚拟机总内存-

可视虚拟机详细信息-

今天的GC日志:

2016-11-02T00:16:58.013-0400: 1791653.461: [GC (Allocation Failure) [PSYoungGen: 1948352K->147200K(1949184K)] 7468597K->5677221K(8240640K), 0.0726273 secs] [Times: user=0.17 sys=0.00, real=0.08 secs] 
2016-11-02T01:08:58.585-0400: 1794774.033: [GC (Allocation Failure) [PSYoungGen: 1948416K->147136K(1949184K)] 7478437K->5686965K(8240640K), 0.0704435 secs] [Times: user=0.17 sys=0.00, real=0.07 secs] 
2016-11-02T02:00:28.573-0400: 1797864.021: [GC (Allocation Failure) [PSYoungGen: 1948352K->147104K(1949184K)] 7488181K->5696733K(8240640K), 0.0731509 secs] [Times: user=0.17 sys=0.00, real=0.08 secs] 
2016-11-02T03:15:56.104-0400: 1802391.552: [GC (Allocation Failure) [PSYoungGen: 1948320K->143664K(1945088K)] 7497949K->5703005K(8236544K), 0.0677412 secs] [Times: user=0.16 sys=0.00, real=0.07 secs] 
2016-11-02T04:08:41.166-0400: 1805556.614: [GC (Allocation Failure) [PSYoungGen: 1944880K->135696K(1945600K)] 7504221K->5704773K(8237056K), 0.0684821 secs] [Times: user=0.15 sys=0.00, real=0.07 secs] 
2016-11-02T05:00:58.618-0400: 1808694.066: [GC (Allocation Failure) [PSYoungGen: 1932816K->127504K(1925120K)] 7501893K->5706357K(8216576K), 0.0649463 secs] [Times: user=0.15 sys=0.00, real=0.06 secs] 
2016-11-02T05:53:38.105-0400: 1811853.553: [GC (Allocation Failure) [PSYoungGen: 1924624K->119504K(1937408K)] 7503477K->5707941K(8228864K), 0.0910155 secs] [Times: user=0.22 sys=0.00, real=0.09 secs] 
2016-11-02T06:46:23.946-0400: 1815019.394: [GC (Allocation Failure) [PSYoungGen: 1904336K->111312K(1896448K)] 7492773K->5709485K(8187904K), 0.0652027 secs] [Times: user=0.15 sys=0.00, real=0.06 secs] 
问题

为什么VisualVM显示的总内存仅为1300MB左右,而top命令显示的总内存为7.5GB。我知道非堆内存也可能存在内存利用率,但jstat命令也确认内存使用率远远高于1300 MB。它在visual vm上是否显示不正确

分析中的遗漏是什么


编辑

进一步的调查表明,堆转储本身可能存在问题。找到了一篇文章,其中说明了使用Java8生成的堆转储可能无法工作。另外,在尝试使用jhat分析堆转储时,生成了以下警告

WARNING:  Failed to resolve object id 0x78281aec0 for field first (signature L)
WARNING:  Failed to resolve object id 0x78391e800 for field unfinalized (signatu
WARNING:  Failed to resolve object id 0x5c07e9958 for field clazz (signature L)
WARNING:  Failed to resolve object id 0x5c07e9700 for field clazz (signature L)
WARNING:  Failed to resolve object id 0x5c07e94f8 for field clazz (signature L)
WARNING:  Failed to resolve object id 0x5c07e9368 for field clazz (signature L)
WARNING:  Failed to resolve object id 0x5c07e90f0 for field clazz (signature L)

是否有其他方法可以正确分析生成堆转储?

visual VM显示的总内存可能是分配给运行的JVM实例的内存,而top将显示机器的总内存。@Mena:服务器上运行两个java进程,堆转储是从进程中生成的(pid-1890,在top命令输出中也可见)它正在服务器上消耗更多内存。堆转储似乎没有正确创建。这是一个单独的问题。它将创建另一个问题。visual VM显示的总内存可能是分配给正在运行的JVM实例的内存,而top将显示机器的总内存。@Mena:有两个java进程正在运行g,堆转储是在进程(pid-1890,在top命令输出中也可见)之外生成的,该进程正在服务器上消耗更多内存。堆转储似乎没有正确创建。还有一个单独的问题。将为其创建另一个问题。