- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在执行以下命令时遇到以下异常
jmap -dump:format=b,file=heap_dump.bin <process_id>
输出:
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)
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
硬件:RHEL 5.x,4 核 CPU Linux 机器 6 GB RAM
根据 oracle 错误报告数据库 (http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6882554),此问题已得到修复,但我仍在获取内部版本号为 45 的 jdk 1.7 版本
除了升级到 Jdk 1.8 之外,您能否建议任何解决方案,由于其他依赖项,这在我的情况下是不可能的?
编辑:
我已尝试使用以下命令,但此命令也不起作用(生成的部分转储文件)并显示相同的 Premature EOF。
jmap -J-d64 -dump:format=b,file=<filename> <pid>
我已经与启动该过程的用户触发了命令。该用户对该目录具有写权限。文件已生成,但不完整。
9 MB 文件是为 2 GB 堆编写的,无法用于分析。
最佳答案
Brian 的评论有助于解决问题。
如果你在 64 位机器上使用 G1GC
算法:
下面的命令不起作用(不包括 live
选项)
jmap -J-d64 -dump:format=b,file=<heap_dump_filename> <pid>
您必须使用以下选项来获取堆转储
jmap -J-d64 -dump:live,format=b,file=<heap_dump_filename> <PID>
有一些建议使用 -F
选项来强制堆转储,但根据 oracle technotes :
-F Force. Use with jmap -dump or jmap -histo option if the pid does not respond. The live suboption is not supported in this mode.
由于 G1GC 选项需要堆转储,因此不能使用上述选项。
关于jmap 命令 : Premature EOF 的 Java 堆转储错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36604102/
我有一行“sun.tools.jmap.JMap.main(args);”在我的代码中。 Eclipse 给出错误,指出该类未识别。所以,我尝试下载 sun.tools jar。但我到处都找不到这个
最近我遇到了一个GC问题,我使用jmap来转储堆。但不幸的是它没有正常工作; 我在转储之前运行 jmap -histo 3916|more ,结果是 num #instances
我的要求是使用 Jmap 创建远程服务器堆内存的转储文件。我是这样做的。 jmap -dump:file=remoteDump.txt,format=b 3104 这很好用,因为 3104 是我本地机
我已经在那里做了一些搜索,但找不到太多真正有用的信息,但是有人可以尝试解释 Java 内存映射的基础知识吗?比如在哪里/如何使用它,它的目的,也许还有一些语法示例(输入/输出类型)?我很快就要参加 J
我使用 jmap 转储使用 CMS GC 的应用程序的 Activity 堆: jmap -dump:live,format=b,file=heap.hprof 我用 YourKit 打开这个转储,
jmap 堆转储格式是否有任何开放规范? 感谢您的帮助! 最佳答案 如果你需要堆的直方图,你可以使用jmap -histo 从实时 JVM 获取直方图。如果您已经有了堆转储文件,请使用 Eclipse
我们在生产环境中运行了 Java 流媒体服务器,它需要大约 10GB 的 RAM 才能运行,因此我们安装了 32GB。逐渐增加内存,直到达到限制并弹出内存不足的异常。 我很难确定随着时间的推移积累了哪
当我运行下面的 jmap 命令时: jmap -histo 14104 我能够看到我的对象的非常好的输出,有实例,使用的字节数。 num #instances #bytes
我们有一个应用程序的公开测试版,它偶尔会导致堆空间溢出。 JVM 的 react 是永久休假。 为了分析这一点,我想看看内存失败的地方。 Java 不希望我这样做。该进程仍在内存中,但似乎没有被识别为
我正在探索构建一个集中托管的电子邮件客户端的可能性,该客户端嵌入在我的网站中。用户将从我那里获得一个新的电子邮件地址,他们没有使用他们现有的电子邮件。本质上,我正在寻找作为一组 RESTful API
当我使用 进行堆转储时,出现以下异常 jmap -F -dump:format=b,file=/tmp/heapdump/before.hprof 10737 Attaching to process
我正在使用 jmapping 插件在谷歌地图中显示地点。如何更改所有图标的默认图标,我阅读了 GM Api 文档,但我不明白该怎么做? 谢谢!PS 我本地没有任何代码。 最佳答案 今天也遇到同样的问题
我正在使用java版本“1.6.0_31”(我知道旧版本)。我正在使用 jmap -heap 来查看进程的 permgen 使用情况。但是,当我查看输出时,我看到这些行,它们似乎告诉我当前的 Perm
当我使用 进行 heapdump 时出现以下异常 jmap -F -dump:format=b,file=/tmp/heapdump/before.hprof 10737 Attaching to p
我试图在我的 CentOS 服务器上使用 jmap 命令,但它一直告诉我找不到该命令,即使我已经安装了 JDK。 这是命令 java -version 的输出: java version "1.7.0
我想从受监控的应用程序内部以编程方式获取与 jmap -histo 的输出等效的内容。我看到可以通过 HotSpot 诊断 bean 触发堆转储,但我看不到如何获取直方图数据。有可能吗? 最佳答案 它
我想知道某个时间 Java 进程使用的总堆大小是多少,我必须使用 jmap . jmap -heap 的输出给了我这样的东西: Attaching to process ID 2899, pleas
我不得不跑 jmap为了对我的进程进行堆转储。但是 jvm返回: Unable to open socket file: target process not responding or Ho
1. 使用背景 在前面jstat命令的介绍中,我们知道了可以用它来轻松的了解到线上系统中JVM的各种运行情况和指标。 但是如果有时候发现jvm中新增对象的速度很快,想要知道是什么对象新增这么快;或
我们知道 jmap -histo:live 会触发完整的 gc 以确定事件对象: Does jmap force garbage collection when the live option is
我是一名优秀的程序员,十分优秀!