Время генерации
При запуске программы Java иногда создаются файлы JavaCore и HeapDump. Обычно это происходит, когда программа Java сталкивается с фатальной проблемой.
Иногда после возникновения фатальной проблемы приложение Java не прекращает работу и может продолжать работать;
Но иногда возникают фатальные проблемы, и процесс Java умирает;
Чтобы сохранить рабочее состояние приложения Java до возникновения фатальной ошибки, JVM перед завершением работы генерирует два файла, а именно файлы JavaCore и HeapDump.
Какая разница
JavaCore — это процессор, а файлы HeapDump — память.
Файл JavaCore в основном сохраняет позицию выполнения каждого потока Java-приложения в определенный момент, то есть какой класс, какой метод и какую строку выполняет JVM. Это текстовый файл. Открыв его, вы можете увидеть стек выполнения каждого потока и отобразить его в виде трассировки стека. Анализируя файл JavaCore, мы можем узнать, не «зависает» ли приложение в определенной точке, то есть, его запуск в определенной точке занимает слишком много времени, например запрос к базе данных, который долго не получает ответа время, что в конечном итоге привело к сбою системы.
Файл HeapDump — это двоичный файл, в котором сохраняется использование объектов в куче JVM в определенное время. Для анализа этого типа файла требуются соответствующие инструменты, например такие инструменты, как IBM Heap Analyzer. Важнейшая функция этого типа файлов — анализ наличия переполнения памяти в системе.
Как создать
Эти два файла можно создать вручную. Когда мы сталкиваемся с ситуацией, когда система работает медленно или не отвечает, мы можем создать файлы JavaCore и HeapDump вручную.
В Unix/Linux метод создания этих двух файлов следующий:
# ps -ef |
пользователь 4616 4582 0 17:30 баллов/0 00:00:00 grep Java
root 5580 1 0 27 октября ? 00:02:27 /usr/bin/java -server -XX:PermSize=64M -XX:MaxPermSize=128m -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava. util.logging.config.file=/usr/local/tomcat8090/conf/logging.properties -Djava.endorsed.dirs=/usr/local/tomcat8090/endorsed -classpath :/usr/local/tomcat8090/bin/bootstrap.jar -Dcatalina.base=/usr/local/tomcat8090 -Dcatalina.home=/usr/local/tomcat8090 -Djava.io.tmpdir=/usr/local/tomcat8090/temp org.apache.catalina.startup.Bootstrap start
# убить -3 5580
Как анализировать
Файл JavaCore
Два набора файлов особенно эффективны при анализе JavaCore, поскольку он может видеть позицию выполнения потока в два момента времени. Если обнаруживается, что один и тот же поток выполняется в одной и той же позиции в двух наборах данных, это происходит. означает, что здесь может быть проблема, потому что программа работает очень быстро, если она находится в определенной точке дважды, это означает, что эта точка занимает очень много времени. Проанализировав эти два файла, мы можем выяснить причину и устранить ее. проблема.
В заголовке файла JavaCore имеется метка «Сведения о текущем потоке», которая записывает идентификатор потока системы, работающей при создании JavaCore. Используйте идентификатор потока, чтобы найти подробную информацию о потоке в файле. какой класс выполняет поток и вызывает JavaCore.
НУЛЕВОЙ ------------------------------------------------- - -----------------------
0SECTION TITLE Процедура дампа подкомпонента
NULL ==============================
1TISIGINFOOUTOFMEMORY получено
1TIDATETIME Дата: 07.12.2011, 15:59:42
1TIFILENAME Имя файла Javacore:/usr/WebSphere/AppServer/profiles/WCSProdNode2/javacore19202086.1323298782.txt
НУЛЕВОЙ ------------------------------------------------- - -----------------------
0SECTION Процедура дампа подкомпонента XHPI
NULL =============================
1XHTIME Ср, 7 декабря 15:59:42 2011 г.
1XHSIGRECV Неожиданный сигнал -1 получен по адресу 0x0 в <неизвестно>. Обработка завершена.
1XHFULLVERSION J2RE 1.4.2 IBM AIX, сборка ca142ifx-20090918 (SR13 FP2)
НУЛЕВОЙ
1XHCURRENTTHD Подробности текущей темы
НУЛЕВОЙ ---------------------------
2XHCURRSYSTHD «Веб-контейнер: 5» sys_thread_t:0x45FB5328
3XHNATIVESTACK Собственный стек
НУЛЕВОЙ------------
3XHSTACKLINEERR недоступен — адрес стека недействителен
:::
:::
0SECTION Процедура дампа подкомпонента XM
NULL ============================
НУЛЕВОЙ
1XMCURTHDINFO Подробности текущей темы
НУЛЕВОЙ ---------------------------
3XMTHREADINFO «WebContainer: 5» (TID: 0x70A8E260, sys_thread_t: 0x45FB5328, состояние: R, собственный идентификатор: 0x5CC0) prio = 5
4XESTACKTRACE в org.apache.taglibs.standard.tag.common.core.ImportSupport$ImportResponseWrapper.getString (неизвестный источник)
4XESTACKTRACE в org.apache.taglibs.standard.tag.common.core.ImportSupport.acquireString (неизвестный источник)
4XESTACKTRACE в org.apache.taglibs.standard.tag.common.core.ImportSupport.doEndTag (неизвестный источник)
4XESTACKTRACE на com.ibm._jsp._part._jspx_meth_c_import_3(_part.java(скомпилированный код))
4XESTACKTRACE на com.ibm._jsp._part._jspx_meth_c_otherwise_3(_part.java(скомпилированный код))
4XESTACKTRACE на com.ibm._jsp._part._jspx_meth_c_choose_4(_part.java(скомпилированный код))
4XESTACKTRACE в com.ibm._jsp._part._jspService(_part.java:3237)
Файл дампа памяти
Файл HeapDump представляет собой снимок стека Java в указанное время и является своего рода файлом изображения. Инструмент Heap Analyzer анализирует файл HeapDump, чтобы определить, какие объекты занимают слишком много места в стеке, и найти объекты, которые вызывают утечки памяти или могут вызвать утечки памяти.