2017-02-21 42 views
2

Во-первых, я использую Intelli Idea в качестве IDE для запуска приложения, которое предназначено для возникновения исключения OOM. VM Опция: -Xmx20M -XX: MaxDirectMemorySize = 10M -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = C: \ Users \ chao.zhang1 \ Desktop \ aaa.hprofне может получить файл дампа с помощью VM Option: HeapDumpOnOutOfMemoryError при возникновении исключения OOM

Применение: импорта 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); 
     } 
    } 
} 

нет файла дампа не существует в каталоге 'C: \ Users \ chao.zhang1 \ Desktop \' после того, как исключение брошено.

Во-вторых, я стараюсь еще один способ, чтобы избежать влияния IDE, я запускаю эту команду в командной строке CMD: Java DirectMemoryOOM -Xmx20M -XX: MaxDirectMemorySize = 10M -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = C: \ Пользователи \ chao.zhang1 \ Desktop \ aaa.hprof все еще не создан файл дампа.

Журнал в консоли:

Exception in thread "main" java.lang.OutOfMemoryError 
     at sun.misc.Unsafe.allocateMemory(Native Method) 
     at DirectMemoryOOM.main(DirectMemoryOOM.java:12) 

обновленный 2017/2/23: сегодня я бегу в другой аварии Jvm, то Intelli выход идея консоли:

# 
# 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' 

Я интересно если что-то связано с «Не удалось записать основной дамп. Minidumps по умолчанию не включены в клиентских версиях Windows. Возможно ли, что система Windows не настроена правильно для сброса файла. Я также попытался включить Mini-dumps через Advanced System Settings -> Startup & Восстановление -> Настройки -> Выбор «дампа памяти». Но ничего не изменилось. Может ли кто-нибудь дать конструктивный совет? спасибо!

+0

сегодня я бегу в аварии Jvm : –

+0

Установка флага HeapDumpOnOutOfMemoryError только вызывает запись кучи кучи, если причиной OutOfMemoryError является то, что куча закончилась. В других ситуациях нет смысла указывать кучу, если куча не там, где происходит утечка памяти. –

+0

Хороший вопрос, тоже. Подсказка: вы не помещаете такие решения в комментарий. Есть два варианта: если вы считаете, что это особая проблема; затем подумайте об удалении вопроса. Но если вы думаете, что ваш вопрос + ваше решение может быть полезным для других; просто напишите свой * собственный * ответ. Это даже законно принять этот ответ. – GhostCat

ответ

0

Оказалось, что я не поставил опцию JVM в правильном порядке. Неверная версия: java DirectMemoryOOM -Xmx20M -XX: MaxDirectMemorySize = 10M -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = C: \ Users \ chao.zhang1 \ Desktop \ aaa.hprof, это неверно, потому что нам нужно поставить опции JVM впереди класс приложения, как это: Java -Xmx20M -XX: MaxDirectMemorySize = 10M -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = C: \ Users \ chao.zhang1 \ Desktop \ aaa.hprof DirectMemoryOOM

0

Что вы включили в системных настройках, являются мини-переходами в случае синих экранов, то есть когда исключение происходит в режиме ядра. Это не имеет ничего общего с Java.

Если вы хотите использовать мини-копии для клиентских версий Java, добавьте -XX:+CreateMinidumpOnCrash в свою командную строку.

+0

Спасибо за все ваши ответы. Оказывается, я не поставил опцию JVM в правильном порядке. Неверная версия: java DirectMemoryOOM -Xmx20M -XX: MaxDirectMemorySize = 10M -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = C: \ Users \ chao.zhang1 \ Desktop \ aaa.hprof. Это неверно, потому что нам нужно поставить опции JVM впереди класса приложения следующим образом: java -Xmx20M -XX: MaxDirectMemorySize = 10M -XX: + HeapDumpOnOutOfMemoryError -XX: HeapDumpPath = C: \ Users \ chao.zhang1 \ Desktop \ aaa .hprof DirectMemoryOOM –