2017-02-21 1 views
2

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!

+0

ich heute in jvm Absturz führen : –

+0

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. –

+0

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

Antwort

0

Es stellt sich heraus, dass ich die JVM-Option nicht in der richtigen Reihenfolge gesetzt habe. Die falsche Version ist: java DirectMemoryOOM -Xmx20M -XX: MaxDirectMemorySize = 10M -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = C: \ Benutzer \ chao.zhang1 \ Desktop \ aaa.hprof, das ist nicht korrekt, da wir JVM-Optionen setzen müssen vor der Anwendung Klasse wie folgt: java -Xmx20M -XX: MaxDirectMemorySize = 10M -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = C: \ Users \ chao.zhang1 \ Desktop \ aaa.hprof DirectMemoryOOM

0

Was Sie in den Systemeinstellungen aktiviert haben, sind Minidumps im Falle von Bluescreens, d. H. Wenn eine Ausnahme im Kernel-Modus auftritt. Das hat nichts mit Java zu tun.

Wenn Sie Minidumps für Client-Versionen von Java benötigen, fügen Sie -XX:+CreateMinidumpOnCrash zu Ihrer Befehlszeile hinzu.

+0

Danke für alle deine Antworten. Es stellt sich heraus, dass ich die JVM-Option nicht in die richtige Reihenfolge gebracht habe. Die falsche Version ist: java DirectMemoryOOM -Xmx20M -XX: MaxDirectMemorySize = 10M -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = C: \ Users \ chao.zhang1 \ Desktop \ aaa.hprof, das ist nicht korrekt, weil wir JVM-Optionen so vor die Anwendungsklasse stellen müssen: java -Xmx20M -XX: MaxDirectMemorySize = 10M -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = C: \ Benutzer \ chao.zhang1 \ Desktop \ aaa .hprof DirectMemoryOOM –

Verwandte Themen