Обмен технологиями

Идеи по устранению утечек памяти вне кучи и совместное использование случаев

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Использованная литература:

①Используйте mtrace для отслеживания утечек памяти вне кучи JVM.

②Случай устранения неполадок, связанных с высоким использованием памяти Java.

1. Идеи расследования

Определите место утечки памяти (подробные команды см. в справочных материалах ①).

  1. Используйте jna, чтобы включить mtrace в коде Java для отслеживания распределения памяти.

  2. Используйте команду mtrace для анализа файлов журналов и получения точек вызова утечки памяти.

  3. arthas проверяет стек вызовов точки вызова утечки памяти (вы можете использовать адрес точки вызова напрямую, имя функции не требуется)

Получите содержимое утечки памяти (подробные команды см. в справочных материалах ②).

  1. Выполните команду pmap в первый раз, чтобы получить информацию об использовании памяти процессом Java.
  2. Через некоторое время объем памяти увеличится. Выполните команду pmap еще раз, чтобы получить информацию об использовании памяти процессом Java.
  3. Используйте инструмент сравнения текста, чтобы сравнить выходные данные двух команд pmap до и после.
  4. Перекодируйте, чтобы просмотреть содержимое вновь добавленной памяти.

2. Распределение дел

При тестировании сервиса в автономном режиме, когда QPS высокий, память, занимаемая областью nio.directbuffer машины, внезапно увеличивается, вызывая в контейнере возникновение OOM.

Используя приведенные выше идеи по устранению неполадок, мы наконец определили, что наша среда RPC генерирует большой объем данных в области прямого буфера. Фактически, когда QPS высокий, количество потоков селектора невелико, а потребляемая мощность недостаточна, что приводит к задержке данных запросов и ответов в области прямого буфера.