Hardware How-to

Диагностика оперативной памяти

Случайные зависания, синие экраны и падения процессов без причины часто указывают на память. Как её проверить и как понять, какой именно модуль виноват.

Проверено: Ubuntu 24.04, Windows 11, memtest86+ 7.0 Нужно знать: Доступ к консоли, возможность перезагрузки
Диагностика оперативной памяти

Ошибка в одном бите памяти проявляется непредсказуемо: сегфолт в случайном процессе, повреждённый файл, зависание без записи в журнал. Отличить от программной проблемы можно только тестом.

Когда подозревать память

  • Падения разных программ без общей закономерности
  • Синий экран с кодом MEMORY_MANAGEMENT или PAGE_FAULT_IN_NONPAGED_AREA
  • Ошибки контрольных сумм при распаковке архивов
  • Kernel panic без явной причины в журнале
  • Система нестабильна сразу после добавления модулей памяти

Шаг 1: что установлено

sudo dmidecode -t memory | grep -E "Size|Speed|Manufacturer|Part Number|Locator"

Компактная сводка:

sudo lshw -short -C memory

Windows:

Get-CimInstance Win32_PhysicalMemory |
    Select-Object BankLabel, DeviceLocator, Capacity, Speed, Manufacturer, PartNumber |
    Format-Table -AutoSize

Шаг 2: проверка ECC-ошибок

Если память серверная с коррекцией ошибок, она сама сообщает о проблемах:

sudo apt install -y edac-utils
sudo edac-util -v

Ошибки в журнале ядра:

sudo journalctl -k | grep -iE "edac|machine check|mce|correctable"

Различайте типы: Corrected Error — ошибка была исправлена, но модуль деградирует. Uncorrected Error — исправить не удалось, данные повреждены.

Совет. На сервере с ECC единичные исправленные ошибки за месяцы работы — норма, вызванная космическим излучением. Десятки в сутки на одном модуле — повод его заменить.

Шаг 3: тест без перезагрузки

Утилита memtester проверяет память, доступную для выделения — систему останавливать не нужно:

sudo apt install -y memtester
sudo memtester 2G 3

Здесь 2G — объём для проверки, 3 — число проходов.

Предупреждение. memtester не проверяет память, занятую ядром и работающими процессами. Он находит грубые дефекты, но чистый результат не гарантирует исправности. Полная проверка требует загрузки вне операционной системы.

Шаг 4: memtest86+

Полноценный тест загружается до операционной системы и проверяет всю память.

sudo apt install -y memtest86+

После установки утилита появится в меню GRUB. Перезагрузитесь и выберите её. Для серверов без консоли используйте IPMI или KVM провайдера.

Что смотреть: столбец Errors должен оставаться нулевым. Минимум — один полный проход, для надёжности — ночь работы.

Шаг 5: Windows

Встроенное средство:

mdsched.exe

Результат после перезагрузки:

Get-WinEvent -FilterHashtable @{ LogName='System'; ProviderName='Microsoft-Windows-MemoryDiagnostics-Results' } -MaxEvents 5 |
    Select-Object TimeCreated, Message | Format-List

Анализ дампов синего экрана:

Get-ChildItem C:\Windows\Minidump\*.dmp | Select-Object Name, LastWriteTime

Шаг 6: найти конкретный модуль

Тест показал ошибки — нужно определить виновника:

  1. Выключите машину, оставьте один модуль
  2. Прогоните memtest86+ хотя бы один проход
  3. Чисто — меняйте на следующий модуль в том же слоте
  4. Когда найдёте сбойный, проверьте его в другом слоте

Если ошибки следуют за модулем — дефект модуля. Если остаются в слоте с любым модулем — проблема в материнской плате или процессоре.

Совет. Перед заменой попробуйте переустановить модули. Окисление контактов и неплотная посадка дают ту же картину, что и дефект памяти. Протрите контакты и вставьте до щелчка защёлок.

Шаг 7: разгон и тайминги

Память, работающая на профиле XMP или EXPO, может быть нестабильна при исправных модулях. Проверьте текущую частоту:

sudo dmidecode -t memory | grep -E "Configured Memory Speed|Speed"

Если Configured выше стандартной частоты — отключите профиль в BIOS и повторите тест на базовых значениях.

Итог

Порядок: посмотреть конфигурацию через dmidecode → проверить журнал на ECC-ошибки → быстрый memtester → полный memtest86+ при подозрениях → поиск конкретного модуля перестановкой. Перед покупкой новой памяти обязательно попробуйте переустановить имеющуюся и отключить разгон.