К основному содержимому

Проверка оперативной памяти сервера: memtest86+ и EDAC

Выделенные серверы · 24.09.2026
Иллюстрация к статье «Проверка оперативной памяти сервера: memtest86+ и EDAC»

Проверка оперативной памяти сервера: 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 и закладывайте от двух полных проходов.
← Назад в базу знаний Задать вопрос поддержке