Проверка оперативной памяти сервера: memtest86+ и EDAC
Память выделенного сервера проверяют двумя способами. Офлайн — загрузкой memtest86+ с внешнего образа: тест пишет и читает шаблоны по всем адресам и находит дефект точно, но сервер на это время не работает. Онлайн — чтением счётчиков подсистемы EDAC в ядре Linux: она регистрирует каждую ошибку, которую исправил ECC, и ловит деградацию модуля за недели до отказа.
- ECC исправляет одиночные битовые ошибки и записывает факт в EDAC: каталог
/sys/devices/system/edac/mc/. - Растущий
ce_countна одном DIMM — повод менять модуль, даже если сервер работает без сбоев. - Ошибка UE (uncorrectable) означает, что данные уже испорчены: сервер выводят из работы сразу.
- Все выделенные серверы ZevsHost идут с DDR4 ECC: от 16 GB на Start до 64 GB на Enterprise US.
EDAC против memtest86+: что чем ловится
EDAC (Error Detection And Correction) — это драйверы ядра под конкретные контроллеры памяти Intel и AMD. Они не тестируют память, а снимают то, что контроллер уже посчитал: сколько одиночных ошибок исправлено (CE) и сколько двойных не удалось исправить (UE). Память при этом работает под вашей реальной нагрузкой, а не под синтетическим шаблоном.
memtest86+ работает иначе: он грузится вместо ОС, забирает всю память себе и прогоняет по ней тесты move inversions, случайными и «ходячими» единицами. Так находят дефекты, которые ECC исправляет молча, и ошибки адресации, когда запись по одному адресу портит другой.
| Метод | Простой нужен | Что находит | Когда применять |
|---|---|---|---|
| EDAC (sysfs) | нет | счётчики CE/UE по контроллерам и слотам | постоянно, в мониторинге |
| memtester | нет | дефекты в свободной части памяти | быстрая проверка на живой машине |
| memtest86+ | да, часы | дефекты ячеек и адресации по всему объёму | приёмка, замена модуля, разбор аварии |
На приёмке нового сервера обе проверки делают до переноса данных — порядок действий разобран в статье про приёмку выделенного сервера.
Онлайн-проверка через EDAC
Счётчики в sysfs
Проверьте, что драйвер загружен, и снимите счётчики. На серверных Xeon E3 и E5 обычно это sb_edac, ie31200_edac или skx_edac.
# драйвер EDAC загружен?
lsmod | grep -i edac
# суммарные счётчики по контроллерам памяти
grep -H . /sys/devices/system/edac/mc/mc*/ce_count
grep -H . /sys/devices/system/edac/mc/mc*/ue_count
# разбивка по слотам: сколько ошибок и как слот подписан в BIOS
grep -H . /sys/devices/system/edac/mc/mc*/dimm*/dimm_ce_count
cat /sys/devices/system/edac/mc/mc0/dimm0/dimm_label
Ноли во всех файлах — нормальное состояние. Любое ненулевое значение в ue_count считайте аварией. Ненулевой ce_count сам по себе не приговор, важна динамика: снимите значение, подождите сутки, снимите снова.
memtester: проверка без перезагрузки
memtester тестирует только ту память, которую смог выделить процессу, поэтому ядро и занятые страницы он не покроет. Для быстрой отсечки этого хватает: если дефект попадает в проверяемую область, он всплывает за минуты.
# свободная память в мегабайтах
free -m
# тест 4 GB, 3 прохода, вывод в файл
memtester 4096M 3 > /var/log/memtester.log 2>&1
# чем закончилось
grep -i -E 'failure|ok' /var/log/memtester.log | tail -n 20
Не запускайте memtester на объём, близкий к общему. Процесс блокирует память через mlock, и ядро отправляет в OOM-killer базу данных, веб-сервер и всё остальное, что работало на машине. Берите не больше 60–70 % от значения free, а на нагруженном сервере — не больше 25 %. Проверить, что вы никого не уронили: dmesg -T | grep -i oom должен молчать, а systemctl --failed — показывать пустой список.
Офлайн-прогон memtest86+
Полноценный тест требует загрузки вместо ОС. На выделенном сервере это делают через IPMI и KVM-over-IP: подключаете ISO как виртуальный привод и выбираете загрузку с него. Опция доступа KVM/IPMI стоит $5/мес на всех тарифах, кроме Dedicated Enterprise US, где она уже включена.
Второй путь — установить пакет в систему, он добавит пункт в меню загрузчика.
# Debian/Ubuntu: пункт memtest86+ в меню GRUB
apt-get install -y memtest86+
update-grub
# проверить, что пункт появился
grep -i memtest /boot/grub/grub.cfg
Ориентируйтесь на время: полный проход по 16 GB DDR4 занимает порядка двух-трёх часов, по 64 GB на Enterprise US — почти сутки. Закладывайте минимум два прохода подряд, а при поиске плавающего дефекта — четыре.
Что делать с найденными ошибками
- Единичный CE за месяц. Записать и наблюдать. Это может быть частица космического излучения, ради которой ECC и придумали.
- Десятки CE в сутки на одном DIMM. Модуль деградирует, планируйте замену в ближайшее окно.
- Любой UE. Немедленно снимайте нагрузку: неисправленная ошибка уже могла попасть в файл базы или в страницу кэша.
- Ошибки мигрируют между слотами. Дело не в модулях: смотрите на контроллер памяти, процессор и настройки таймингов в BIOS/UEFI.
Почему ECC вообще стоит того и чем серверная память отличается от десктопной, разобрано отдельно в статье про ECC-память в сервере. Конфигурации по объёму памяти на каждом тарифе смотрите на странице выделенных серверов.
Коротко
- Счётчики EDAC дают раннее предупреждение без простоя; memtest86+ даёт доказательство, но требует остановки.
- Следите за динамикой
ce_countпо слотам, а не за самим фактом ненулевого счётчика. - Любая UE — повод вывести сервер из работы, не дожидаясь окна обслуживания.
- Для офлайн-теста подключите ISO через IPMI и закладывайте от двух полных проходов.