Процесс останавливается, пока ОС уплотняет память (compaction), чтобы собрать большие страницы (huge pages), или освобождает память, чтобы пополнить запас свободной (reclaim).
Почему Свободной памяти становится мало, или механизм больших страниц (THP) запускает уплотнение памяти → Следствие Поток, запросивший память, ждёт, пока закончится освобождение или уплотнение → На экране Нерегулярные остановки сервера (от единиц до сотен ms)
Основной ответственный Команда инфраструктуры · Серверная инфраструктура · Совместно Команда разработки · Разработка сервера
Команда разработки: задачи
Сократить крупные выделения памяти во время работы (выделять заранее при запуске и переиспользовать).
Команда инфраструктуры: задачи
Разрешить большие страницы (THP) только там, где они нужны (madvise), поднять порог свободной памяти (vm.min_free_kbytes и др.).
На графике
Случайные всплески · время тика сервера, PSI памяти
Где смотреть
Смотреть some и full в /proc/pressure/memory (доля времени, проведённого в ожидании памяти) и прирост compact_stall в /proc/vmstat вместе со временем тика сервера, проверить настройку /sys/kernel/mm/transparent_hugepage/defrag
Подтверждает
В моменты всплесков времени тика растут PSI памяти и compact_stall. defrag стоит в always
Опровергает
Если PSI и compact_stall не меняются, причина в другом. Если растёт использование свопа, это «Своп»
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Источники
Transparent Hugepage SupportLinux kernel При defrag=always, если выделить THP не удалось, процесс останавливается и тут же выполняет освобождение и уплотнение памяти. При madvise так происходит только в областях, для которых это запрошено
Documentation for /proc/sys/vm/Linux kernel min_free_kbytes: минимальный объём свободной памяти, который ядро держит в резерве (порог watermark)
PSI - Pressure Stall InformationLinux kernel some в /proc/pressure/memory (доля времени, когда часть задач стояла в ожидании памяти) и full (доля времени, когда стояли все задачи)