标签: heap-dump

如何从运行tomcat 7获取堆转储

我试过这个从Tomcat 6获取JVM上的一个 堆转储,但它对我不起作用,还有其他方法从tomcat服务器获取堆转储吗?提前致谢!

java heap-dump tomcat7

11
推荐指数
2
解决办法
4万
查看次数

为什么我的Java堆转储大小比使用的内存小得多?

问题

我们正试图在我们的Web应用程序中找到大内存泄漏的罪魁祸首.我们在查找内存泄漏方面经验非常有限,但我们发现如何jmap在Eclipse MAT中使用和分析它来进行Java堆转储.

但是,我们的应用程序使用56/60GB内存,堆转储的大小只有16GB,在Eclipse MAT中甚至更少.

上下文

我们的服务器在Ubuntu 14.04上使用Wildfly 8.2.0作为我们的Java应用程序,其进程使用95%的可用内存.进行转储时,我们的缓冲区/缓存已用空间为56GB.

我们使用以下命令创建转储: sudo -u {application user} jmap -dump:file=/mnt/heapdump/dump_prd.bin {pid}

堆转储文件大小为16,4GB,当使用Eclipse MAT进行分析时,它表示有大约1GB的活动对象和大约14,8GB的无法访问/浅堆.

编辑:这里有一些关于我们看到的问题的更多信息.我们监视内存使用情况,我们看到它的增长和增长,直到剩下大约300mb的可用内存.然后它保持在那个内存量附近,直到进程崩溃,不幸的是在应用程序日志中没有错误.

这使我们假设它是一个硬OOM错误,因为这只发生在内存接近耗尽时.我们使用-Xms25000m -Xmx40000mJVM 的设置.

基本上,我们想知道为什么我们的大部分内存都没有在这个转储中被捕获.顶部保留的大小类看起来并不太可疑,所以我们想知道是否存在与堆转储有关的问题我们做错了什么.

java memory-leaks heap-memory jmap heap-dump

11
推荐指数
2
解决办法
1万
查看次数

使用jmap命令的Java堆转储错误:过早的EOF

我在执行下面的命令时遇到了以下异常

jmap -dump:format=b,file=heap_dump.bin <process_id>
Run Code Online (Sandbox Code Playgroud)

输出:

Dumping heap to <file_name>
Exception in thread "main" java.io.IOException: Premature EOF
            at sun.tools.attach.HotSpotVirtualMachine.readInt(HotSpotVirtualMachine.java:248)
            at sun.tools.attach.LinuxVirtualMachine.execute(LinuxVirtualMachine.java:199)
            at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:217)
            at sun.tools.attach.HotSpotVirtualMachine.dumpHeap(HotSpotVirtualMachine.java:180)
            at sun.tools.jmap.JMap.dump(JMap.java:242)
            at sun.tools.jmap.JMap.main(JMap.java:140)
Run Code Online (Sandbox Code Playgroud)

JDK版本:1.7.0_45

VM_OPT:

-Xms2g -Xmx4g  -XX:+UseG1GC -XX:MaxGCPauseMillis=1500 
-XX:G1HeapRegionSize=2 -XX:+PrintFlagsFinal -XX:ParallelGCThreads=4 -XX:ConcGCThreads=2 
Run Code Online (Sandbox Code Playgroud)

硬件:RHEL 5.x,4核CPU Linux机器6 GB RAM

根据oracle bug报告数据库(http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6882554),这个问题已经修复,但我仍然得到jdk 1.7版本,内置编号为:45

除了升级到Jdk 1.8之外,您能否提出任何解决方案,由于其他依赖性,这在我的情况下是不可能的?

编辑:

我已尝试使用以下命令,此命令也不起作用(生成部分转储文件)并显示相同的早期EOF.

jmap -J-d64 -dump:format=b,file=<filename> <pid>
Run Code Online (Sandbox Code Playgroud)

我已经与启动该过程的用户触发了该命令.该用户具有该目录的写权限.该文件已生成但尚未完成.

2 GB堆写入了9 MB文件,该文件无法用于分析.

java heap-memory eof heap-dump

11
推荐指数
1
解决办法
3526
查看次数

垃圾收集器第一和JMap EOF错误

我们正在研究客户端的生产服务器堆,以检测和解决内存泄漏问题.为此,我们定期使用jmap来收集必要的信息.

但是上周我们无法进行转储,因为它触发了EOF错误并关闭了Tomcat实例.

我在互联网上搜索,但找不到有关此错误的任何具体信息.我们检测到只有在使用Gc First垃圾收集器算法时才会发生.

这是我们用来执行jmap的命令行:

jmap -dump:format=b,file=heap.bin <PID>

服务器上的Java版本:JDK 1.7.0_7 x64

有没有人遇到过这种错误?可能缺少一些配置或需要java/jmap的补丁.

UPDATE

我们收集的有关此错误的更多信息:

[root]# jmap -dump:format=b,file=heap.bin 7806
    Dumping heap to /tmp/heap.bin ...
    Exception in thread "main" java.io.IOException: Premature EOF
        at sun.tools.attach.HotSpotVirtualMachine.readInt(HotSpotVirtualMachine.java:244)
        at sun.tools.attach.LinuxVirtualMachine.execute(LinuxVirtualMachine.java:193)
        at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:213)
        at sun.tools.attach.HotSpotVirtualMachine.dumpHeap(HotSpotVirtualMachine.java:180)
        at sun.tools.jmap.JMap.dump(JMap.java:241)
        at sun.tools.jmap.JMap.main(JMap.java:140)
[root]#
Run Code Online (Sandbox Code Playgroud)

注意:目标目录有超过500GB的可用空间

错误输出到catalina.out(JVM转储错误):

# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00007f0269cc41c6, pid=7806, tid=139647231129360
#
# JRE version: Java(TM) SE Runtime Environment (7.0_40-b43) (build 1.7.0_40-b43)
# …
Run Code Online (Sandbox Code Playgroud)

java jmap heap-dump

10
推荐指数
1
解决办法
1562
查看次数

如何仅使用JRE生成堆转储?

我们在生产环境中安装了JRE,但没有安装JDK.JRE和OS的版本如下.

[me@mymachine ~]$ java -version
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
[me@mymachine ~]$ uname -a
Linux mymachine.mydomain.com 3.10.35-43.137.amzn1.x86_64 #1 SMP Wed Apr 2 09:36:59 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

似乎"jmap"工具不存在于系统的任何位置,并且没有root访问权限,我无法在任何系统位置安装它.我该怎么做才能获得堆转储(即生成.hprof文件)?

另外,如果重要的话,我们正在使用JBoss 7.1.3.AS.

java heap-dump

10
推荐指数
2
解决办法
1万
查看次数

node.js堆内存转储,为什么String内存太高?

我的代码中有一些内存泄漏.所以我使用heapdump nodemodule获取了内存快照.使用heapdump我已经修复了一些东西然后很好.但是为什么字符串缓冲区大小仍然太高并且继续增加?

我已为我的组件附加了内存heapdump的屏幕截图.heapdump文件大小是139MB所以我不能在这里附加.我不知道你们需要帮助的其他信息......

字符串内存列表

整体记忆清单

heap-memory node.js heap-dump

10
推荐指数
1
解决办法
1474
查看次数

我可以用PHP打印整个程序状态吗?

PHP提供了一些令人印象深刻的反省设施:get_defined_vars,get_defined_functions,get_defined_constants,debug_backtrace,和其他人.从本质上讲,它们提供了整个程序状态的视图:堆栈和堆.我想知道使用这些设施可以获得的程序状态的完整视图.

可以将作用域中的堆和所有已定义的变量建模为标记的有向图.例如,有可能写一些能给我Graphviz/DOT描述的东西吗?我正在想象类似于本文中关于"PHP如何管理变量"的图表,或者关于垃圾收集的PHP手册页面中的图表.

php callstack introspection heap-dump

9
推荐指数
1
解决办法
809
查看次数

V8 Javascript堆转储架构

我正在尝试了解Google Chrome工具生成的heapdump的内容.我知道已有一个浏览器内堆转储检查器,但我有兴趣编写一个解析JS堆转储作为练习的CLI.我无法找到有关堆转储内容结构的任何文档.它们是人类可读的,但检查文件的格式不是很清楚

这是一个随机片段:

"HTMLOptionElement",
"XMLHttpRequestEventTarget",
"about:blank",
"clearModifier",
"resetModifiers",
"/devtools/docs/demos/memory/example1",
"HTMLIFrameElement",
"https://www.google.com/jsapi?autoload=%7B%22modules%22%3A%5B%7B%22name%22%3A%22search%22%2C%22version%22%3A%221.0%22%2C%22callback%22%3A%22__gcse.scb%22%2C%22style%22%3A%22https%3A%2F%2Fwww.google.com%2Fcse%2Fstyle%2Flook%2Fv2%2Fdefault.css%22%2C%22language%22%3A%22en%22%7D%5D%7D",
"HTMLLinkElement",
"HTMLContentElement",
"window.__SSR = {c: 1.2808007E7 ,si:1,su:1,e:'richard@example.com',dn:'Richard Schneeman',a:'bubble',at:'AZW7SXV+1uUcQX+2WIzyelLB5UgBepsr1\\/RV+URJxwIT6BmLmrrThMH0ckzB7mLeFn1SFRtxm\\/1SD16uNnjb0qZxXct8\\x3d',ld:[,[0,12808007,[]\n,1,70]\n]\n,r:'https:\\/\\/developer.chrome.com\\/devtools\\/docs\\/demos\\/memory\\/example1',s:'widget',annd: 2.0 ,bp: {}, id:'http:\\/\\/www.google.com\\/chrome'}; document.addEventListener && document.addEventListener('DOMContentLoaded', function () {gapi.inline.tick('wdc', new Date().getTime());}, false);",
"onLoaded",
"HTMLAllCollection",
"onDocumentKeyDown",
Run Code Online (Sandbox Code Playgroud)

是否存在关于chrome堆转储结构的文档?是否有标准的javascript堆转储格式或每个引擎都有自己的专有标准?

javascript v8 heap-dump google-chrome-devtools

9
推荐指数
1
解决办法
913
查看次数

如何收集任何java进程的堆转储

我是Heaps的新手,任何人都可以建议我如何对任何java进程(如Jmeter)进行堆转储.我读到了关于jmap命令,但我没有得到执行/编写它的地方和方式(在eclipse或cmd中).这可能是一个非常基本的问题,但仍然需要建议.我可以从任何地方下载jmap.exe和jhat.exe吗?谢谢

java thread-dump heap-dump

9
推荐指数
1
解决办法
2万
查看次数

为什么 jmap 和 jcmd 生成的堆转储大小存在差异?

我正在尝试使用以下 2 个命令进行堆转储

  1. jcmd $pid GC.heap_dump /tmp/filename.dump
  2. jmap -dump:format=b,file=/tmp/filename.dump $pid

jcmd 产生 ~300M 的文件大小,jmap 产生 ~1.4G 的文件大小。为什么这些是不同的大小,我们在 jmap 中有任何其他信息吗?我在 jcmd 中遗漏了一些参数吗?

JDK 是 1.8.0_162

Xms 和 Xmx 是 4G

java jmap heap-dump java-8 jcmd

8
推荐指数
1
解决办法
2738
查看次数