У меня странная ситуация на производственном сервере. Соединение для asp.net будет поставлено в очередь, но процессор только на 40%. Кроме того, база данных работает нормально с 30% CPU.Приложение Asp.net медленное, но CPU на 40% максимум
Некоторые больше истории, как предложено в комментариях:
- В часы пик сайты получает около 20000 посетителей в час.
- Сайт представляет собой приложение ASP.NET WebForms с большим количеством AJAX/ сообщения
- Сайта использует много контента, созданные пользователей
- Мы измеряем производительность сайта с тестовой страницей, которая действительно попала в базу данных и веб-сервисы, используемые сайтом. Эта страница обслуживается в течение секунды при нормальной нагрузке. Определите приложение так медленно, когда запрос занимает более 4 секунд.
- Из измерений мы видим, что время соединения очень быстрое, но время обработки велико.
- Мы не можем точно определить медленный ответ на один запрос, сайт работает нормально в обычное время, но медленнее в часы пик
- У нас была проблема с тем, что сайт был связан с ЦП (он же работает на 100%), мы исправлено, что
- У нас также были проблемы с исключениями, вызванными перезапуском appdomain, мы исправили это сделать
- В часы пик я смотрю счетчики производительности asp.net. Мы можем видеть, что у нас есть 600 текущих соединений с 500 поставленными в очередь соединениями.
- В пиковые времена процессора составляет около 40% (что делает меня думать, что это не ЦП)
- физической памяти составляет около 60% используется
- В пиковые времена DatabaseServer процессора составляет около 30% (что заставляет меня думать, что это не привязано к базе данных)
Мое заключение заключается в том, что что-то еще мешает серверу быстрее обрабатывать запросы. Возможные подозреваемые
- Тупики (syncblk дает только один замок!)
- Disk I/O (проверено с помощью Sysinternals procesexplorer: 3,5 Мбит/с)
- Вывоз мусора (10 ~ 15% во время пиков)
- Сетевой ввод-вывод (время подключения еще не установлено)
Чтобы узнать, что делает процесс, я создал для мини-пультов.
Мне удалось создать два MemoryDumps на расстоянии 20 секунд. Это выход из первого:
!threadpool
CPU utilization 6%
Worker Thread: Total: 95 Running: 72 Idle: 23 MaxLimit: 200 MinLimit: 100
Work Request in Queue: 1
--------------------------------------
Number of Timers: 64
и выход из второго:
!threadpool
CPU utilization 9%
Worker Thread: Total: 111 Running: 111 Idle: 0 MaxLimit: 200 MinLimit: 100
Work Request in Queue: 1589
Как вы можете видеть, что есть много запрос в очереди.
Вопрос 1: Что означает, что в очереди 1589 запросов. Означает ли это, что что-то блокирует?!
Список ThreadPool содержит в основном эти записи: Unknown Функция: 6a2aa293 Контекст: 01cd1558 AsyncTimerCallbackCompletion TimerInfo @ 023a2cb0
Если я вас в глубину с AsyncTimerCallbackCompletion
!dumpheap -type TimerCallback
Тогда я смотрю на объектов в TimerCallback и большинство из них относятся к типам:
System.Web.SessionState.SessionStateModule
System.Web.Caching.CacheCommon
Вопрос 2: Имеет ли смысл, что эти объекты имеют таймер и так много? Должен ли я предотвратить это. И как?
Главный вопрос Я пропустил все очевидные проблемы, почему я общаюсь с соединениями и не максимизирую процессор?
Мне удалось сделать авария во время пика. Анализируя его DebugDiag дал мне это предупреждение:
Detected possible blocking or leaked critical section at webengine!g_AppDomainLock owned by thread 65 in Hang Dump.dmp
Impact of this lock
25.00% of threads blocked
(Threads 11 20 29 30 31 32 33 39 40 41 42 74 75 76 77 78 79 80 81 82 83)
The following functions are trying to enter this critical section
webengine!GetAppDomain+c9
The following module(s) are involved with this critical section
\\?\C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\webengine.dll from Microsoft Corporation
Быстрый поиск Google не дает мне никаких результатов. У кого-то есть ключ?
Вы пытались измерить скорость от Firebug? посмотрите, какая часть загружает самую длинную .. затем начните оттуда. – Arief
Это чрезвычайно сложно диагностировать, используя предоставленную вам информацию о пятнах. Есть ли причина, по которой вы начали смотреть на аварийные свалки? Сбой приложения ASP.NET? Если да, то почему классифицировать это как проблему производительности? –