Отладка методов общего пула ASP.Net - PullRequest
3 голосов
/ 15 ноября 2010

Я работаю в хостинговой компании, предоставляющей хостинг ASP.Net 3.5. Честно говоря, мы обычно обеспечиваем довольно хорошее время безотказной работы и скорость. Однако у нас возникли проблемы с одним из наших общих пулов. Как обычно, мы стараемся максимизировать количество сетей, которые могут попадать в один пул.

В последнее время мы страдаем от постоянных зависаний. Процесс не завершается сбоем, но начинает показывать исключения OutOfMemoryException или останавливает обработку запросов. Мы считаем, что это ответственность одного из приложений (было бы здорово узнать, какое из них).

У меня есть несколько дампов памяти, которые я обработал с помощью WinDbg. Я бегу f.e:

!dumpheap -stat

Этот метод обеспечивает использование объектов в глобальной памяти. Ничего примечательного ... Также я проверил:

~*e!clrstack 

Я вижу различные неуправляемые темы. В тех, кто управляется, появляется стеки вроде:

[HelperMethodFrame_1OBJ: 0f30e320]            
System.Threading.WaitHandle.WaitMultiple(System.Threading.WaitHandle...
0f30e3ec 7928b3ff System.Threading.WaitHandle.WaitAny(System.Threading...
0f30e40c 7a55fc89 System.Net.TimerThread.ThreadProc()...
0f30e45c 792d6e46 System.Threading.ThreadHelper.ThreadStart_Context(System...
0f30e468 792f5781 System.Threading.ExecutionContext.runTryCode(System...

По крайней мере, я не видел исключения или подобного (в тот момент). У меня также был доступ к двум сценариям, написанным Тесс Феррандез для расчета количества сеансов и размера. Также здесь не многообещающие результаты. Ничего особенного или замечательного (в среднем 24000 байт).

Я хотел бы знать, какие стратегии вы обычно используете для решения подобных проблем. Вы когда-нибудь пользовались поддержкой Microsoft?

Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 16 ноября 2010

Очень хороший вопрос, ну плохой asp.net может повесить все общие веб-приложения в одном пуле ...

Хорошо, давайте посмотрим ... если проблема связана с памятью, получите VMMap от Sysinternals, а также Process Explorer

Запустите их обоих, и из Process Explorer найдите номер PID пула, который вы хотите исследовать, он находится в inetinfo.exe и, вероятно, имеет имя aspnet_wp.exe .

Теперь в VMMap добавить для мониторинга этого пула, используя для справки PID, и вуаля, вы видите память и открытые образы (файлы aspx), которые, вероятно, много, и создают проблемы ... Файлы, которые вы собираетесь чтобы увидеть, находятся на временном asp.net Framework, но вы можете подключить их и увидеть с сайта ведьмы, откуда они пришли.

Ну, если проблема не в памяти, но программист создал плохие циклы или даже спит потоков, то я думаю, что Process Explorer - это способ исследовать пулы и искать, что потребляет энергию.

Дополнительный

Может, рециркуляция пула каждые 15 минут может решить эту проблему?

Подробнее о

В этих видео есть много информации о VMMap и диспетчере памяти. Тайны управления памятью Windows, часть 1 и , часть 2

1 голос
/ 16 ноября 2010

Существует много инструментов, но, похоже, ваша главная цель - определить причину проблемы.Это можно сделать очень просто с помощью бинарного поиска.

Разбейте пул пополам и посмотрите, какой из них падает.Повторяйте до тех пор, пока у вас не будет разбитого пула с одним приложением.

Это уже O (log2n), но вы можете произвольно ускорить процесс, разделив более двух подпулов.

...