Zuerst verwende ich Intelli Idea als IDE, um eine Anwendung auszuführen, die eine OOM-Ausnahme verursachen soll. VM Option: -Xmx20M -XX: MaxDirectMemorySize = 10M -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = C: \ Benutzer \ chao.zhang1 \ Desktop \ aaa.hprofkann eine Dump-Datei nicht mit VM Option: HeapDumpOnOutOfMemoryError, wenn OOM-Ausnahme ausgelöst
Anwendung: import sun.misc.Unsafe ;
import java.lang.reflect.Field;
public class DirectMemoryOOM{
private static final int _1MB=1024*1024;
public static void main(String[]args)throws Exception{
Field unsafeField=Unsafe.class.getDeclaredFields()[0];
unsafeField.setAccessible(true);
Unsafe unsafe=(Unsafe)unsafeField.get(null);
while(true){
unsafe.allocateMemory(_1MB);
}
}
}
keine Dump-Datei existiert im Verzeichnis 'C: \ Benutzer \ chao.zhang1 \ Desktop \' nach Ausnahme ausgelöst.
Zweitens versuche ich einen anderen Weg, um die Auswirkungen der IDE zu vermeiden, habe ich diesen Befehl in cmd Befehlszeile: java DirectMemoryOOM -Xmx20M -XX: MaxDirectMemorySize = 10M -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = C: \ Users \ chao.zhang1 \ Desktop \ aaa.hprof wurde noch keine Speicherabbilddatei erstellt.
Die Log-in-Konsole ist:
Exception in thread "main" java.lang.OutOfMemoryError
at sun.misc.Unsafe.allocateMemory(Native Method)
at DirectMemoryOOM.main(DirectMemoryOOM.java:12)
2017/2/23 aktualisiert: ich heute in einer anderen Jvm Absturz führen, die intelli Idee Konsolenausgabe:
#
# A fatal error has been detected by the Java Runtime Environment:
#
# Internal Error (javaCalls.cpp:62), pid=11864, tid=13164
# guarantee(thread->is_Java_thread()) failed: crucial check - the VM thread cannot and must not escape to Java code
#
# JRE version: Java(TM) SE Runtime Environment (7.0_79-b15) (build 1.7.0_79-b15)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (24.79-b02 mixed mode windows-amd64 compressed oops)
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# E:\apache-tomcat-7.0.69\apache-tomcat-7.0.69\bin\hs_err_pid11864.log
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
#
Disconnected from the target VM, address: '127.0.0.1:58121', transport: 'socket'
Ich frage mich, wenn es irgendwas zu tun gibt mit 'konnte Core-Dump nicht schreiben. Minidumps sind in Clientversionen von Windows nicht standardmäßig aktiviert. 'Ist das Windows-System möglicherweise nicht ordnungsgemäß für das Ablegen von Dateien konfiguriert? Ich habe auch versucht, Mini-Dumps über Erweiterte Systemeinstellungen -> Startup & Recovery -> Einstellungen -> Auswahl von "kleinen Speicherauszug" zu aktivieren. Aber nichts hat sich geändert. Kann jemand einen konstruktiven Rat geben? Danke!
ich heute in jvm Absturz führen : –
Das Setzen des HeapDumpOnOutOfMemoryError-Flags bewirkt nur, dass Heap-Dumps geschrieben werden, wenn der Grund für den OutOfMemoryError ist, dass der Heapspeicher aufgebraucht ist. In anderen Situationen ist es nicht sinnvoll, den Heapspeicher zu entladen, wenn sich der Heap nicht im Speicherleck befindet. –
Schöne Frage auch. Tipp: Sie fügen solche Lösungen nicht in einen Kommentar ein. Es gibt zwei Möglichkeiten: wenn Sie das für ein ganz besonderes Problem halten; dann überlegen Sie, die Frage zu löschen. Aber wenn Sie denken, dass Ihre Frage + Ihre Lösung für andere hilfreich sein könnte; schreibe einfach deine * eigene * Antwort auf. Es ist sogar legitim, diese Antwort zu akzeptieren. – GhostCat