Хорошие инструменты и подходы для диагностики плохой работы
Моя компания разрабатывает веб-приложение для просмотра данных, которое требует достаточно приличной пропускной способности для нормального функционирования. Однако в последнее время мы многое изменили. Например, мы изменили нашу внутреннюю сетевую инфраструктуру, чтобы данные могли размещаться на отдельных компьютерах, подключенных к Gigabit Ethernet. Кроме того, само приложение продолжает выпускать новые версии, поскольку мы все еще находимся в альфа- и бета-тестировании.
Недавно мы внесли некоторые изменения, которые снижают производительность, и мы хотим попытаться определить, в чем проблема, прежде чем мы начнем разбирать вещи на части. Это очень маленькая сеть, и у меня ограниченный опыт работы в качестве ИТ-администратора. У меня есть несколько идей о том, с чего начать, но я хотел бы сначала извлечь небольшую мудрость из плюсов: как вы решаете / избегаете подобных проблем? Какие наиболее полезные (Windows) инструменты вы использовали?
7 ответов
Я всегда придерживаюсь этого подхода: стараюсь проверять одну вещь за раз.
Надежный "Научный метод" очень хорошо подходит для устранения неполадок:
- Придумайте теорию, почему приложение работает медленно
- Разработайте тест, который может подтвердить эту теорию.
- повторение.
Для веб-приложения это может означать:
- это может быть база данных? Запустите несколько автономных SQL-запросов
- это может быть веб-сервер? Протестируйте веб-сервер, выбирая статические страницы
- это может быть приложение? Протестируйте веб-сервер, нажав динамические страницы, которые не попадают в базу данных
- это может быть интерфейс приложений к БД? Протестируйте веб-сервер, нажав динамические страницы, которые попадают в базу данных.
также выполнение базовых тестов для тестирования процессора, памяти, скорости диска может помочь исключить одну из этих вещей, прежде чем идти дальше.
Я вижу такие вещи все время:
резервное копирование на новом сервере занимает больше времени, чем на старом.
Но никто не сделал базовый тест диска, чтобы выяснить, что у более старого сервера было в два раза больше шпинделей, чем у нового сервера... или сетевой тест, чтобы выяснить, что гигабитная сеть Ethernet новых серверов работала только на 100M.
Из всего сказанного следует, что если это пользовательское веб-приложение, то фреймворк, который вы используете, наиболее определенно имеет способ выгрузить информацию о производительности в файл журнала... но это больше вопрос для stackoverflow.
Я подписался на метод устранения неполадок "Шерлок Холмс", известный как метод устранения неполадок бинарного поиска:
- Разделите проблемное пространство пополам.
- Исключите одну половину проблемного пространства.
- Повторите с оставшимся проблемным пространством.
По моему опыту, иногда вам везет, когда вы сначала пробуете некоторые очевидные вещи, но как только вы исчерпали действительно быстрые исправления, вам нужно быстро освоить методику.
Этот метод совместим с Научным Методом и Испытанием Одного за Одну.
Сумма ответов выше 90% того, что я бы сказал, вот остальные 10%:
- Изучите урок об управлении окружающей средой, более конкретно об изменениях в окружающей среде. Даже если вы уже измеряете производительность, изменение более чем одной вещи за раз означает, что любая проблема превращается в двухэтапную проблему: поиск как следствия, так и причины. Если вы меняете одну вещь за раз и у вас есть действующий план по откату любой проблемы с производительностью, обычно это может быть связано с этим изменением (обычно случается что-то странное, или кто-то меняет что-то, о чем вы не знаете), и, надеюсь, исправляется путем замены вернуть изменения.
- Самое полезное, что нужно сделать, это измерять рано и часто. Факты и точные данные облегчают решение проблем с производительностью.
- Наименее полезная вещь, которую вы можете сделать, это угадать, что не так, и изменить это без измерения. Вы будете удивлены, как часто разумное обоснованное предположение не решает проблему и не ухудшает ее.
- Вы не можете измерить то, что вы еще не определили. Каждый раз, когда у вас возникает проблема с производительностью, определите, каково ожидание конечного пользователя, а затем найдите способ измерить успех или неудачу, чтобы оправдать это ожидание таким образом, чтобы вы могли повторить. Делайте это как можно точнее, и вы сузите область того, что вам нужно исследовать, и тесты, которые вам нужно будет выполнить для этого.
- Что касается Windows, я большой поклонник журналов счетчиков производительности и использую PAL для обработки и интерпретации. Обзорный отчет системы и предлагаемые счетчики для этого отчета охватывают большинство возможных источников узкого места. http://pal.codeplex.com/
Некоторые из лучших инструментов, которые можно найти для устранения неполадок Windows, от Microsoft Sysinternals. И некоторые из лучших сведений о том, как их использовать (и техническую информацию Windows в целом) можно найти в блоге Марка Руссиновича и веб-трансляциях. Его книга о Windows Internals также полна полезной информации.
С учетом вышесказанного я бы предложил начать с программ Process Explorer и Process Monitor, чтобы посмотреть, какой веб-сервис у вас работает, и посмотреть, что происходит. Обе программы позволяют отображать большое количество информации о запущенных процессах, которую можно настроить, щелкнув правой кнопкой мыши заголовки столбцов.
Что изменилось, что привело к проблемам с производительностью? Если бы только код был изменен, то я бы начал там устранять неисправности.
По рекомендации Джона Т, мне понравилось использовать dstat с gnuplot.
Сравните статистику проблемы с известным хорошим состоянием и найдите расхождения.
Известное хорошее состояние может быть фактическим задокументированным состоянием. Он также может быть основан на стандартном ожидаемом поведении, таком как известное ожидаемое поведение сетевых протоколов или, например, эмпирические правила о соответствующем среднем использовании ЦП.
Примеры:
Используя Wireshark или другой инструмент сетевого анализатора, вы неоднократно видите дублирующиеся пакеты. Теперь вы можете разобраться, почему вы видите один и тот же IP-пакет в сети. Возможно, у вас есть сценарий "локальный маршрутизатор", или, возможно, что-то фрагментирует IP-пакеты.
Среднее использование процессора составляет 90%. Если среднее значение составляет 90%, то сервер, вероятно, часто загружает ЦП, что приводит к резервному копированию всего.