Мы запустили пользовательское приложение в нашей интрасети, и после недавнего обновления мы обнаружили проблему, когда IIS зависает при 100% загрузке ЦП и требует сброса.
Вместо того, чтобы подвергать пользователей зависаниям, мы откатились к предыдущему выпуску, пока определяем решение. Первый шаг - воспроизвести проблему, но мы не можем.
Вот немного фона:
Prod имеет один виртуальный (vmware) веб-сервер с двумя процессорами и 2 ГБ оперативной памяти. Сервер базы данных имеет 4 ГБ и 2 процессора. Это также на VMWare, но отдельное физическое оборудование.
При нормальном использовании приложение работает нормально. Процесс w3wp.exe обычно использует 5-20% ЦП и около 200 МБ ОЗУ. Процессор и оперативная память слегка колеблются при нормальном использовании, но ничего необычного.
Однако, когда мы начинаем сталкиваться с проблемами, ОЗУ резко возрастает, а ЦП привязывается к 98% (или столько, сколько может получить). Сайт перестает отвечать на запросы, что требует перезапуска IIS. Сброс пула приложений ничего не делает в этой ситуации, требуется полная перезагрузка IIS.
Это не происходит ночью (без использования). Это происходит чаще, когда сайт находится под нагрузкой, но это также происходило в непиковые периоды.
Первый шаг к решению этой проблемы - ее воспроизведение. Чтобы имитировать нагрузку, мы начали использовать JMeter для имитации использования. Наш скрипт загрузки основан на фактическом использовании во время сбоя. Используя JMeter, мы можем нарастить использование довольно высоко (в 2-3 раза больше нагрузки во время сбоя), но сайт ведет себя нормально. Процессор высок, и сайт становится вялым, но использование памяти разумно, и ничего не зависает.
У кого-нибудь есть советы, как воспроизвести проблему, подобную этой, в непроизводственной среде? Нам бы очень хотелось воспроизвести ошибку, определить решение, а затем снова протестировать, чтобы убедиться, что мы ее исправили. В ходе этого процесса мы обнаружили несколько небольших улучшений, которые могут решить проблему, но я действительно чувствовал бы себя намного увереннее, если бы мы могли воспроизвести проблему и протестировать улучшенную версию.
Любые инструменты, методы или теории высоко ценится!