но должен быть адаптирован к контексту Java.

тоящее время я пытаюсь решить проблему с памятью Java: мое приложение Java продолжает использовать все больше и больше памяти, и в итоге оно убивается убийцей OOM Linux.

Вероятно, имеется утечка встроенной памяти, потому что после проверки JVM с VisualVM и метапространство, и куча выглядят нормально.

Используя команду top, я вижу, что память, используемая JVM, продолжает увеличиваться.

Первый рисунок в этой статье:

Пример № 1

Это идеальное совпадение с тем, что я вижу в своем собственном приложении.

Поэтому я попытался использовать JeMalloc, чтобы найти утечку, как описано в различных статьях. Здесь я сталкиваюсь с проблемой: при использовании команды jeprof, а затем и самой верхней команды в самом jeprof, он показывает функции, которые используют больше всего памяти, но они в шестнадцатеричных адресах, поэтому я должен пропустить некоторые символы. Но я не знаю, какие пакеты мне нужны для этого, это мне неизвестно.

Я уже нашел эту ссылку:Ссылка № 1

И установил этот пакет: debuginfo-install java-1.8.0-openjdk

Сначала я попытался выполнить простые шаги:

Заставьте JeMalloc работать с простым приложением, таким как w. Затем заставьте его работать с Java-версией. Пока все хорошо, я также могу получить PDF от JeMalloc с отличным обзором.

Затем приведите его к работе с java -jar simpletest.jar << Здесь я пропускаю символы Например, если я не закрываю здесь GZipInputStream, это не отображается в результатах JeMalloc.

Затем настройте его на работу с java -jar myapplication.jar << Здесь также отсутствуют символы.

Итак, мой вопрос в основном: какие пакеты мне нужны, чтобы JeMalloc отображал все имена символов для отладки приложений, таких как:

public void test1() {
    InputStream fileInputStream = null;
    GZipInputStream gzipInputStream = null;

    try {
      fileInputStream = new FileInputStream("test.zip");
      gzipInputStream = new GZIPInputStream(fileInputStream);

      int data = gzipInputStream.read();
      while (data != -1) {
        // do something with data
        data = gzipInputStream.read();
      }

    } catch (Exception ex) {

    } finally {
      // Disabled to see whether JeMalloc can detect the leak
      /*try {
        if (gzipInputStream != null) {
          gzipInputStream.close();
        }
        if (fileInputStream != null) {
          fileInputStream.close();
        }

        gzipInputStream = null;
        fileInputStream = null;
      } catch (IOException e) {
      e.printStackTrace();
    }*/
  }
}

Используя следующее программное обеспечение:

Linux CentOS 7JeMallocOpenJDK

Найдены статьи:

Статья 1

Статья № 2

Статья № 3

Статья № 4

Ответы на вопрос(1)

Ваш ответ на вопрос