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

Где утечка памяти в этом Java-сценарии?

Я работаю с приложением Java на хосте, у которого не хватает памяти, что приводит к сбою JVM.

JVM — это 8. Например, я установил Xms и Xmx на 10240 м на хосте 16 ГБ (под управлением Linux). Со временем я отслеживаю кучу JVM (например, с помощью JMX или агента Java), и использование остается постоянным и в определенных пределах. Сборщик мусора запускается регулярно и выполняет очистку, и ни одно из пространств памяти не имеет тенденции к увеличению с течением времени.

А вот на хостовой ОС слежу за использованием памяти - через ps - параметры vsize и size остаются постоянными, а вот pmem со временем увеличивается (да и rss думаю тоже, но только начал за этим следить). pmem достигает 99% использования, а затем jvm не может выделить память и завершает работу. Я подозреваю, что rss со временем будет увеличиваться (уже начало двигаться в этом направлении).

Является ли это признаком утечки памяти в приложении Java, в котором работает JVM? Я предполагаю, что у самой JVM вряд ли будет утечка памяти. И агент, работающий в -javaagent, довольно широко используется, так что тоже не думайте, что это он. Будет ли это хорошей догадкой? Если это утечка памяти из-за приложения, что может произойти или как ее найти? Что-то вроде JMX, похоже, ничего не отдает, похоже, что это что-то выделено в памяти, о чем JVM не знает.

Спасибо.

03.06.2019

Ответы:


1

Боюсь, вам придется отлаживать эту проблему, нет никакого способа узнать, что работает на вашем сервере.

Вы можете улучшить ситуацию, предварительно выделив память кучи JVM с параметром запуска -Xms10240m. Если -Xms равно -Xmx, размер кучи JVM не будет изменен.

Поскольку вы используете Java 8, вам следует проверить использование метапространства. По умолчанию ограничений нет, поэтому потенциально неисправный загрузчик классов может привести к утечке памяти. Вы можете установить -XX:MaxMetaspaceSize=512m вариант запуска.

Третьим возможным виновником может быть сторонняя библиотека, которая использует память вне кучи, например. некоторые библиотеки кэша обращаются к памяти непосредственно за пределами кучи JVM.

03.06.2019
  • Спасибо. Я уже устанавливаю Xmx и Xms на 10240 м. Metaspace очень помогает, рассмотрю это! Спасибо. В противном случае попытаемся выяснить, что использует память вне кучи. 03.06.2019
  • Новые материалы

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

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

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

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

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

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

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