Необходимо найти узкое место производительности в серверном приложении под большой нагрузкой. Приложение состоит из экземпляра одиночных сервисов (.asmx) и некоторых файлов, которые время от времени запрашиваются по http. Мой план решения этой проблемы: 1) получить исключительную ситуацию, когда сервер начинает сбой как-то 2) анализировать счетчики производительности и журналы в этот момент времени, чтобы вычесть, какие вызовы вызвали это.ASP.NET Web Services + Диагностика производительности IIS
Для этого я внедрил специальный клиент, который обрабатывает оба типа запросов и заставляет его повторять соответствующие циклы неопределенно надеясь, в какой-то момент я получу ошибки во время запросов URL-адреса WebMethod/GET (NB - стандартные уже существующие решения такие как JMeter и WAPT не могут использоваться в сложном сценарии использования сервисов). До сих пор я наблюдаю увеличение времени отклика в вызовах службы и некоторых исключениях тайм-аута сети во время загрузки файлов (используя HttpClient, который генерирует OperationCanceledException, который считается тайм-аутом в соответствии с - this thread). Кстати, это странно, потому что размер файлов невелик kb, а методы службы возвращают 5-10 мб данных за запрос. Мысль «большие» запросы с большей вероятностью потерпит неудачу в первую очередь.
Perfmon показывает увеличенную загрузку процессора и абсолютно никаких всплесков памяти/утечек. Request Execution Time counters довольно случайны и выглядят неуместными, длина очереди всегда равна 0.
Это говорит о том, что IIS хорошо справляется с моим импровизированным DDoS и в то же время делает неэффективным подход к тестированию (увеличение времени ответа означает более активные запросы в памяти на тестовый клиент, который вызывает переполнение памяти в какой-то момент, и я уже очищаю данные сразу после получения, не делая ничего с ним).
Подробнее: серверный компьютер имеет 4x3 ГГц ядра, 4 Гб оперативной памяти. Я генерирую нагрузку 50-100 запросов в секунду, что приводит к полосе пропускания 10-20 Мбит/с (тестовые клиенты расположены на виртуальной машине внутри центра данных сервера, NIC 4 Гбит/с). 30-минутный сеанс тестирования составляет ~ 10-30 Гб чистой передачи данных между сервером и клиентом.
Как я могу заставить веб-службу/IIS спуститься?
Я искал способ добиться некоторого сбоя в инфраструктуре сервера и найти узкое место производительности, но теперь ясно, что подход грубой силы не работает. Пожалуйста, удалите этот вопрос. Заранее спасибо. – Jaded