Назад | Перейти на главную страницу

Как получить дополнительную информацию о сбое системы

Я хотел бы отладить проблему, с которой я столкнулся с сервером Linux (стабильный debian), но у меня заканчиваются идеи, как подтвердить любой диагноз.

Немного предыстории: серверы работают под управлением класса DL160 с аппаратным рейдом между двумя дисками. Они запускают множество сервисов, в основном используя сетевой интерфейс и ЦП. Существует 8 процессоров и 7 «основных» процессов, наиболее требовательных к процессорам, каждый из которых привязан к одному ядру через сродство к процессору. Другие случайные фоновые скрипты никуда не навязываются. Файловая система все время записывает ~ 1,5 Кб / с (в пиковое время увеличивается до 2 Кб / с). Нормальное использование ЦП для этих серверов составляет ~ 60% на 7 ядрах и некоторое минимальное использование на последнем (независимо от того, что обычно выполняется на оболочках).

На самом деле происходит то, что «основные» службы в какой-то момент начинают использовать 100% ЦП, в основном застревая во времени ядра. Через пару секунд LA превысит 400, и мы потеряем возможность подключиться к коробке (KVM уже в пути, но еще не там). Иногда мы видим, что ядро ​​сообщает о зависшей задаче (но не всегда):

[118951.272884] INFO: task zsh:15911 blocked for more than 120 seconds.
[118951.272955] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[118951.273037] zsh           D 0000000000000000     0 15911      1
[118951.273093]  ffff8101898c3c48 0000000000000046 0000000000000000 ffffffffa0155e0a
[118951.273183]  ffff8101a753a080 ffff81021f1c5570 ffff8101a753a308 000000051f0fd740
[118951.273274]  0000000000000246 0000000000000000 00000000ffffffbd 0000000000000001
[118951.273335] Call Trace:
[118951.273424]  [<ffffffffa0155e0a>] :ext3:__ext3_journal_dirty_metadata+0x1e/0x46
[118951.273510]  [<ffffffff804294f6>] schedule_timeout+0x1e/0xad
[118951.273563]  [<ffffffff8027577c>] __pagevec_free+0x21/0x2e
[118951.273613]  [<ffffffff80428b0b>] wait_for_common+0xcf/0x13a
[118951.273692]  [<ffffffff8022c168>] default_wake_function+0x0/0xe
....

Это может указывать на сбой рейда / диска, однако иногда задачи зависают на ядре gettsc что указывало бы на какое-то общее странное поведение оборудования.

Он также запускает mysql (почти только для чтения, 99% попаданий в кеш), который, кажется, порождает намного больше потоков во время системных проблем. Днем делает ~ 200кг / с (выбирает) и ~ 10кг / с (записывает).

У хоста никогда не заканчивается память или не происходит подкачки, никаких отчетов об ошибках не обнаруживается.

У нас есть много коробок с одинаковым / одинаковым оборудованием, и все они, кажется, ведут себя именно так, но я не уверен, какая часть неисправна, поэтому, вероятно, не стоит просто брать что-то более мощное и надеяться, что проблема исчезнет.

Сами приложения на самом деле не сообщают ни о чем неправильном при запуске. Я могу безопасно запускать что угодно на том же оборудовании в изолированной среде. Что я могу сделать, чтобы сузить проблему? Где еще мне искать объяснения?

DL160? У вас на машине стоит iLO? Оттуда вы можете дистанционно управлять приставкой и перезагружать, включать или выключать питание. Однако может потребоваться расширенная лицензия. iLO работает на отдельном оборудовании от основной системной платы, поэтому он всегда должен быть доступен, пока к серверу подключен шнур питания. iLO также дает вам доступ к запуску сброса NMI на хосте, а также к регистрации последнего фатального сбоя , что позволяет ограниченное изучение.

Вы также пробовали «прожечь» сервер с помощью MemTest86 + в течение примерно 8 часов (при условии, что вы можете себе позволить такой длительный простой)? Ошибки памяти в Linux иногда проявляются довольно забавно. Этот отчет Oops ссылается на функцию памяти (__pagevec_free ()), которая мощь предполагают плохую ячейку памяти, к которой обращаются очень редко, отсюда и период ожидания между сбоями.

Вы также проверили, что ваш BIOS полностью обновлен от HP?

Помимо этого, скомпилируйте собственное ядро ​​и включите все символы отладки, а также посмотрите несколько HOWTO по использованию KGDB для отладки сбоя ядра. Есть некоторые уловки, которые вы можете использовать, чтобы поймать ядро ​​при его сбое, а затем использовать KGDB, чтобы посмотреть на backstrace и, возможно, выследить некорректную пользовательскую программу или дополнительно идентифицировать ваши аппаратные ошибки.