Рейтинг:0

Недостаточно памяти, «общая» и «бафф/кеш» потребляют всю память

флаг pk

oom_reaper всегда убивает наше приложение, хотя память не используется самим процессом.

free -m непосредственно перед тем, как убийца OOM завершит процесс, указывает, что «общая» и «бафф/кеш» нуждаются во всей памяти:

root@local:/tmp# бесплатно -m
              общее количество использованных бесплатных общих баффов/доступных кешей
Мем: 3861 627 95 3037 3138 26
Обмен: 0 0 0

Очистка кеша с помощью эхо 3 > /proc/sys/vm/drop_caches ничего не делает.

linuxatemyram.com здесь не применяется.

Я также уже исключил, что память используется RAM-диском/tempfs с помощью df -t tmpfs --total -h.

meminfo, как раз перед тем, как убийца OOM завершил процесс, вернул следующее:

root@local:/tmp# awk '$3=="kB"{$2=$2/1024;$3="MB"} 1' /proc/meminfo | столбец -т
Общий объем памяти: 3861,26 МБ
MemFree: 108,297 МБ
Доступно: 49,6445 МБ
Буферы: 2,82422 МБ
Кэшировано: 3069,16 МБ
SwapCached: 0 МБ
Активно: 42,8164 МБ
Неактивно: 578,258 МБ
Активный (анон): 2,78125 МБ
Неактивный (анон): 542,719 МБ
Активный (файл): 40,0352 МБ
Неактивный (файл): 35,5391 МБ
Неизбежный: 2964,51 МБ
Заблокировано: 18,6484 МБ
SwapTotal: 0 МБ
СвопБесплатно: 0 МБ
Грязный: 0,09375 МБ
Обратная запись: 0 МБ
Страницы анона: 513,977 МБ
Сопоставлено: 85,9766 МБ
Шмем: 2987,97 МБ
KReclaimable: 37,6602 МБ
Слой: 104,531 МБ
SReclaimable: 37,6602 МБ
SUnreclaim: 66,8711 МБ
Стек ядра: 6,625 МБ
Таблицы страниц: 11,4961 МБ
NFS_Unstable: 0 МБ
Отказ: 0 МБ
WritebackTmp: 0 МБ
Максимальный размер: 1930,63 МБ.
Зафиксировано_AS: 5638,47 МБ
VmallocTotal: 3.35544e+07 МБ
VmallocUsed: 27,3516 МБ
Вмаллокчанк: 0 МБ
Процессор: 3,23438 МБ
HardwareCorrupted: 0 МБ
AnonHugePages: 0 МБ
ShmemHugePages: 0 МБ
ShmemPmdMapped: 0 МБ
FileHugePages: 0 МБ
FilePmdMapped: 0 МБ
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Огромный размер страницы: 2 МБ
Вес: 0 МБ
DirectMap4k: 179,078 МБ
DirectMap2M: 3850 МБ

ipcs -m --human возвращает:

root@local:~# ipcs -m --human

------ Сегменты общей памяти --------
ключ шмид владелец разрешения размер nattch статус
0x00000000 2 пользователя 600 512K 2 получателя
0x00000000 262202 пользователь 600 512K 2 адресата

Когда наше приложение завершается, "бафф/кэш" и "общий доступ" также снова освобождаются. Профилировщик памяти также не показывает никаких проблем. Как я могу узнать, какие данные находятся в «общих» и «баффах/кеше»?

Система: Ubuntu Server 20.04, 5.11.0-41-универсальная (HWE)

waltinator avatar
флаг it
"распределение памяти" быстро меняется - ваша статистика после того, как OOM-Killer сохранил вашу систему. Прочтите `man ps top strace`, чтобы узнать, как получить дополнительную информацию. Слишком рано в диагностике проблемы утверждать о невиновности какого-либо компонента. Если вы измерите, вы будете знать.
domsch avatar
флаг pk
Я сделал статистику (бесплатно, memstat) непосредственно перед тем, как OOM killer завершил процесс, я обновил пост, спасибо за совет, посмотрю.
waltinator avatar
флаг it
Ваше «приложение» постоянно потребляет некоторый ресурс, что приводит к исчерпанию памяти.
waltinator avatar
флаг it
«Общая» память — это место, куда загружаются «разделяемые библиотеки» (*.so) и отображаются в адресное пространство процессов, использующих библиотеки. Этот метод позволяет избежать того, чтобы каждый процесс имел свою собственную копию библиотеки, и делает программы меньше, упрощает обновление библиотеки и используется с давних времен. Память «buff/cache» удерживается незначительно и используется для ускорения доступа к буферизованным или кэшированным данным. Под «легким удержанием» я подразумеваю, что процессы, использующие память `buff/cache`, могут получить указание освободить ее с помощью распределителя памяти.

Ответить или комментировать

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