Nano Hash - криптовалюты, майнинг, программирование

Как процесс Java с параметром -Xmx1024m может занимать 3 ГБ резидентной памяти?

Это веб-приложение Java на Websphere6.1, Solaris 10, JDK 1.5.0_13. Мы установили максимальный размер кучи 1024 м. jmap показывает, что состояние кучи исправно. Использование памяти кучи составляет всего 57%. Никакого OutOfMemory.

Но мы видели очень высокий RSS (3 ГБ) для этого java-процесса из ps. pmap показывает блок частной памяти 1,9 ГБ.

3785:   /dmwdkpmmkg/was/610/java/bin/java -server -Dwas.status.socket=65370 -X
 Address  Kbytes     RSS    Anon  Locked Pgsz Mode   Mapped File
...
0020A000    2008    2008    2008       -   8K rwx--    [ heap ]
00400000 1957888 1957888 1957888       -   4M rwx--    [ heap ]
8D076000      40      40      40       -   8K rw--R    [ stack tid=10786 ]
...

Это утечка памяти кучи C в машинном коде? Какой подход рекомендуется для выяснения первопричины?

26.03.2009

Ответы:


1

Этот документ Устранение утечек памяти из Sun может помочь вам найти проблему, почему ваш RSS высокий, особенно в разделе 3.4.

Поскольку вы используете Websphere, возможно, вы сможете использовать -memorycheck на своей виртуальной машине. Подробнее см. здесь.

Это не обязательно утечка в собственном коде. Если вы посмотрите здесь, в Solaris может быть проблема с файлами. оставаться открытым.

Это просто набор ссылок и подсказок, но, возможно, он поможет разобраться в вашей проблеме.

26.03.2009
  • Они полезны. Хотя -memorycheck кажется доступным только для IBM JDK? В Solaris нет IBM JDK, только SUN JDK, верно? 27.03.2009
  • Не знаю, у меня нет опыта работы с Solaris, но, вероятно, нет ... Возможно, IBM JDK идет с Websphere, поскольку он также от IBM. Вот о чем я подумал. 27.03.2009

  • 2

    Это может произойти, даже если нет утечки собственной памяти (например, незакрытых zip-ресурсов).

    Я столкнулся с той же проблемой. Это известная проблема с glibc> = 2.10.

    Лекарство - установить эту переменную env export MALLOC_ARENA_MAX=4

    Статья IBM о настройке MALLOC_ARENA_MAX 10_rhel_6_malloc_may_show_excessive_virtual_memory_usage?lang=en" https://www.memory_usage"> com / developerworks / community / blogs / kevgrig / entry / linux_glibc

    # tune glibc memory allocation, optimize for low fragmentation
    # limit the number of arenas
    # requires glibc >= 2.16 since there was a bug in 
    # MALLOC_ARENA_TEST parameter handling that cause MALLOC_ARENA_MAX not to work
    export MALLOC_ARENA_MAX=2
    # disable dynamic mmap threshold, see M_MMAP_THRESHOLD in "man mallopt"
    export MALLOC_MMAP_THRESHOLD_=131072
    export MALLOC_TRIM_THRESHOLD_=131072
    export MALLOC_TOP_PAD_=131072
    export MALLOC_MMAP_MAX_=65536
    
    10_rhel_6_malloc_may_show_excessive_virtual_memory_usage? lang = en

    Google по запросу MALLOC_ARENA_MAX или поищите его на SO, чтобы найти много ссылок.

    Возможно, вы захотите настроить и другие параметры malloc для оптимизации с низкой фрагментацией выделенной памяти:

    # tune glibc memory allocation, optimize for low fragmentation
    # limit the number of arenas
    # requires glibc >= 2.16 since there was a bug in 
    # MALLOC_ARENA_TEST parameter handling that cause MALLOC_ARENA_MAX not to work
    export MALLOC_ARENA_MAX=2
    # disable dynamic mmap threshold, see M_MMAP_THRESHOLD in "man mallopt"
    export MALLOC_MMAP_THRESHOLD_=131072
    export MALLOC_TRIM_THRESHOLD_=131072
    export MALLOC_TOP_PAD_=131072
    export MALLOC_MMAP_MAX_=65536
    

    Вы можете вызвать встроенную функцию malloc_info, чтобы получить информацию о распределении памяти. Вот пример с использованием JNA для вызова собственного метода malloc_info.

    21.04.2015
  • Спасибо, Лари! Ваш ответ очень убедителен. Однако у меня больше нет приложения и solaris env для проверки - вопрос о происхождении был поднят 6 лет назад :) Но все равно спасибо, что дали мне знать. Какое-то время этот вопрос был для меня загадочным. 28.04.2015
  • Проверьте этот ответ: stackoverflow.com/a/35610063, в нем есть более подробная информация об утечках собственной памяти Java. 13.09.2019

  • 3

    Размер кучи - это размер кучи Java, все еще есть виртуальная машина и другие библиотеки, которые являются частью процесса.

    Попробуйте запустить Hello World с размером кучи 1024 м и надписью «for (;;)» и посмотрите, сколько это займет. Это должно дать вам основу для общего использования памяти.

    26.03.2009

    4

    Вы используете библиотеки JNI? Я не уверен, как собственный код распределяет оперативную память, но я бы начал искать именно здесь.

    26.03.2009
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..