Kernel BUG at mm/page_alloc.c (Bad page state) — Решение ошибки памяти
Архитектура ошибки и симптомы сбоя
Макрос «Kernel BUG at mm/page_alloc.c (Bad page state in process)» срабатывает в подсистеме распределения страниц оперативной памяти ядра Linux (Buddy Allocator). При попытке выделить или освободить физическую страницу памяти ядро обнаружило, что флаги структуры struct page находятся в некорректном или поврежденном состоянии (например, страница помечена как свободная, но содержит ссылки на использование).
Диагностическая таблица параметров сбоя
| Параметр | Значение | Инженерный смысл сбоя |
|---|---|---|
| mm/page_alloc.c | Source File | Основной аллокатор физических страниц памяти ядра. |
| flags | PageFlags Bitmask | Недопустимая комбинация системных флагов страницы (PG_locked, PG_active, PG_slab). |
| Corruptor | Hardware RAM / UAF | Аппаратный сбой памяти либо запись после освобождения (Use-After-Free) драйвером. |
Пошаговое дерево решений и сценарии траблшутинга
Сценарий 1: Проверка на аппаратные ошибки Bit-Flip в памяти
Ошибки в page_alloc.c в 90% случаев вызваны повреждением ячеек ОЗУ (bit flipping):
# Установка memtester для проверки свободной памяти без перезагрузки:
sudo apt-get install memtester
# Тестирование 16GB памяти в 3 прохода:
sudo memtester 16G 3Сценарий 2: Отключение аппаратных механизмов сжатия памяти (ZRAM/ZSWAP)
Если используется zram/zswap, сбой может быть вызван ошибкой в алгоритме компрессии:
# Временное отключение zswap:
echo 0 | sudo tee /sys/module/zswap/parameters/enabledСценарий 3: Активация отладки страниц (Page Poisoning) в ядре
Если сбой происходит регулярно, включите санитайзер страниц памяти через GRUB для локализации модуля-нарушителя:
# Добавьте в /etc/default/grub:
GRUB_CMDLINE_LINUX="page_poison=on slub_debug=FPZ"
sudo update-grubITSTM проводит глубокий стресс-аудит серверов (mcelog, EDAC, mprime) для выявления скрытых аппаратных дефектов и оптимизации серверов баз данных.
Частые вопросы (FAQ)
Всегда ли Kernel BUG приводит к полной остановке системы?
Если сбой произошел в непривилегированном потоке, ядро может завершить вызвавший процесс (Oops). Но если повреждена глобальная структура аллокатора страниц, ядро вызовет Kernel Panic во избежание повреждения файлов на диске.
Поможет ли включение ECC-памяти?
Да. Серверная память с ECC автоматически корректирует одиночные битовые ошибки (Single Bit Errors), полностью предотвращая подобные падения Buddy Allocator.