When trying to dump large arrays, jmap fails in various ways:
E.g.
public class Test {
public static void main(String[] args) throws Exception {
byte[] something = new byte[2 * 1024 * 1024 * 1024 - 30];
System.out.println("waiting");
System.in.read();
}
}
fails in the jmap process with a "file size limit" message when run with
java -Xmx12g Test.java
and
jmap -J-d64 -J-XX:SegmentedHeapDumpThreshold=2M -dump:format=b,file=heap.bin
on linux/x64.
(Note the forced segmentation too, but there does not seem to be a reason why writing a ~2G object would fail on a 64 bit system; it also fails without the SegmentedHeapDumpThreshold set)
This code:
public class Test {
public static void main(String[] args) throws Exception {
int[] something = new int[2 * 1024 * 1024 * 1024 - 30];
System.out.println("waiting");
System.in.read();
}
}
crashes the VM to be dumped with
# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc: SuppressErrorAt=/heapDumper.cpp:1043
#
# A fatal error has been detected by the Java Runtime Environment:
#
# INVALID (0xe0000000) at pc=0x0000000000000000, pid=2168, tid=2236
# assert(length_in_bytes > 0) failed: nothing to copy
#
# JRE version: Java(TM) SE Runtime Environment (9.0) (build 9-internal+0-2015-12-10-095457.tschatzl.hs-gc)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (9-internal+0-2015-12-09-143703.tschatzl.hs-gc, mixed mode, tiered, compressed oops, g1 gc, linux-amd64)
# Core dump will be written. Default location: Core dumps may be processed with "/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e %P %I" (or dumping to ...)
#
# An error report file with more information is saved as:
# .../hs_err_pid2168.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
and the jmap process errors out with
Exception in thread "main" java.io.IOException: Premature EOF
at sun.tools.attach.HotSpotVirtualMachine.readInt(HotSpotVirtualMachine.java:294)
at sun.tools.attach.VirtualMachineImpl.execute(VirtualMachineImpl.java:199)
at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:263)
at sun.tools.attach.HotSpotVirtualMachine.dumpHeap(HotSpotVirtualMachine.java:226)
at sun.tools.jmap.JMap.dump(JMap.java:247)
at sun.tools.jmap.JMap.main(JMap.java:142)
(same command line)
E.g.
public class Test {
public static void main(String[] args) throws Exception {
byte[] something = new byte[2 * 1024 * 1024 * 1024 - 30];
System.out.println("waiting");
System.in.read();
}
}
fails in the jmap process with a "file size limit" message when run with
java -Xmx12g Test.java
and
jmap -J-d64 -J-XX:SegmentedHeapDumpThreshold=2M -dump:format=b,file=heap.bin
on linux/x64.
(Note the forced segmentation too, but there does not seem to be a reason why writing a ~2G object would fail on a 64 bit system; it also fails without the SegmentedHeapDumpThreshold set)
This code:
public class Test {
public static void main(String[] args) throws Exception {
int[] something = new int[2 * 1024 * 1024 * 1024 - 30];
System.out.println("waiting");
System.in.read();
}
}
crashes the VM to be dumped with
# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc: SuppressErrorAt=/heapDumper.cpp:1043
#
# A fatal error has been detected by the Java Runtime Environment:
#
# INVALID (0xe0000000) at pc=0x0000000000000000, pid=2168, tid=2236
# assert(length_in_bytes > 0) failed: nothing to copy
#
# JRE version: Java(TM) SE Runtime Environment (9.0) (build 9-internal+0-2015-12-10-095457.tschatzl.hs-gc)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (9-internal+0-2015-12-09-143703.tschatzl.hs-gc, mixed mode, tiered, compressed oops, g1 gc, linux-amd64)
# Core dump will be written. Default location: Core dumps may be processed with "/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e %P %I" (or dumping to ...)
#
# An error report file with more information is saved as:
# .../hs_err_pid2168.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
and the jmap process errors out with
Exception in thread "main" java.io.IOException: Premature EOF
at sun.tools.attach.HotSpotVirtualMachine.readInt(HotSpotVirtualMachine.java:294)
at sun.tools.attach.VirtualMachineImpl.execute(VirtualMachineImpl.java:199)
at sun.tools.attach.HotSpotVirtualMachine.executeCommand(HotSpotVirtualMachine.java:263)
at sun.tools.attach.HotSpotVirtualMachine.dumpHeap(HotSpotVirtualMachine.java:226)
at sun.tools.jmap.JMap.dump(JMap.java:247)
at sun.tools.jmap.JMap.main(JMap.java:142)
(same command line)
- duplicates
-
JDK-8129419 heapDumper.cpp: assert(length_in_bytes > 0) failed: nothing to copy
-
- Resolved
-
-
JDK-8144732 VM_HeapDumper hits assert with bad dump_len
-
- Closed
-
- relates to
-
JDK-8129419 heapDumper.cpp: assert(length_in_bytes > 0) failed: nothing to copy
-
- Resolved
-
-
JDK-8144732 VM_HeapDumper hits assert with bad dump_len
-
- Closed
-