Почему внутренняя память в Java отслеживает собственную память?

Мое приложение работает в Docker-контейнере, оно использует scala и использует «64-разрядную серверную виртуальную машину OpenJDK (сборка 25.102-b14, смешанный режим)», его Xmx установлено в 16 ГБ и ограничение памяти контейнера составляет 24 ГБ, после запуска для некоторых время уничтожения контейнера:

Last State:         Terminated
  Reason:           OOMKilled
  Exit Code:        137

Однако я не могу найти никаких ошибок «java.lang.OutOfMemoryError: Java heap space» в журнале, даже не один раз за последние 2 недели на всех 48 узлах. Так что это вряд ли нормальная куча OOM.

вывод dmesg:

$ dmesg -l err,crit,alert,emerg
STDIN is not a terminal
[1647254.978515] Memory cgroup out of memory: Kill process 10924 (java) score 1652 or sacrifice child
[1647254.989138] Killed process 10924 (java) total-vm:34187148kB, anon-rss:24853120kB, file-rss:23904kB
[1655749.664871] Memory cgroup out of memory: Kill process 1969 (java) score 1652 or sacrifice child
[1655749.675513] Killed process 1969 (java) total-vm:35201940kB, anon-rss:24856624kB, file-rss:24120kB
[1655749.987605] Memory cgroup out of memory: Kill process 2799 (java) score 1656 or sacrifice child

Затем я запускаю JCMD несколько раз, прежде чем он снова уничтожается, и данные выглядят следующим образом: Отслеживание собственной памяти:

Итого: зарезервировано = 25505339 КБ, зафиксировано = 25140947 КБ - куча Java (зарезервировано = 16777216 КБ, зафиксировано = 16777216 КБ) (карта: зарезервировано = 16777216 КБ, зафиксировано = 16777216 КБ)

Класс (зарезервировано = 247996 КБ, зафиксировано = 93500 КБ) (классы # 14539) (malloc = 2236 КБ # 29794) (mmap: зарезервировано = 245760 КБ, зафиксировано = 91264 КБ)

Поток (зарезервировано = 1013160KB, зафиксировано = 1013160KB) (поток # 1902) (стек: зарезервировано = 1003956KB, зафиксировано = 1003956KB) (malloc = 6240KB # 9523) (арена = 2964KB # 3803)

Код (зарезервировано = 263255 КБ, зафиксировано = 86131 КБ) (malloc = 13655 КБ # 20964) (карта: зарезервировано = 249600 КБ, зафиксировано = 72476 КБ)

GC (зарезервировано = 776174KB, зафиксировано = 776174KB) (malloc = 120814KB # 164310) (mmap: зарезервировано = 655360KB, зафиксировано = 655360KB)

Компилятор (зарезервировано = 812 КБ, зафиксировано = 812 КБ) (malloc = 681 КБ # 1823) (арена = 131 КБ # 3)

Внутренний (зарезервировано = 6366260 КБ, зафиксировано = 6366256 КБ) (malloc = 6366256 КБ # 178778) (mmap: зарезервировано = 4 КБ, зафиксировано = 0 КБ)

Символ (зарезервировано = 18391 КБ, зафиксировано = 18391 КБ) (malloc = 16242 КБ # 153138) (арена = 2150 КБ # 1)

Собственное отслеживание памяти (зарезервировано = 9002 КБ, зафиксировано = 9002 КБ) (malloc = 186 КБ # 2000) (накладные расходы на отслеживание = 8816 КБ)

Блок Арены (зарезервировано = 273 КБ, зафиксировано = 273 КБ) (malloc = 273 КБ)

Неизвестно (зарезервировано = 32800 КБ, зафиксировано = 32 КБ) (mmap: зарезервировано = 32800 КБ, зафиксировано = 32 КБ)

Одна вещь, которую я заметил, это этот раздел: Внутренний (зарезервировано = 6366260KB, зафиксировано = 6366256KB)

Он продолжает расти и приводит к тому, что общее использование памяти превышает ограничение в 24 ГБ.

Кто-нибудь видел подобную проблему раньше? и кто-нибудь знает, что здесь находится Внутренняя память и что может быть причиной того, что она продолжает расти без освобождения памяти?

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

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