Лучший отвечающий
Использование памяти web приложением asp.net

Вопрос
-
На нашем хостинге возникла проблема превышения использования лимита выделенной оперативной памяти в 200 Мб.
При этом приложение не очень активное в плане нарушения общепринятых норм ООП программирования и большая часть работы происходит в базе. Но попытки приблизить интерфейс к десктопному привели к использованию многих дополнительных библиотек.
Вопрос - где и как можно посмотреть сколько памяти использует конкретное приложение? Может быть есть какие-то статьи по этому поводу? Пытался заставить perfmon показать что-нибудь осмысленное, но не получается. Порядок действий такой - создаю в IIS свой пул, запускаю в нём приложение. В perfmon создаю счётчик - нахожу в папке Приложения ASP.NET свой запущенный сайт. ВЫбираю "Использование памяти управляемого кода (оценка)" Получаю график на котором нет размерности. Внизу окошки со слабой логикой привязки. Если перезапустить сайт то можно увидеть ступеньки и опять график идёт по верхнему пределу.
Как узнать по этой картинке сколько памяти требуется приложению? Или необходимы другие счётчики?
- Изменено albert t 21 февраля 2013 г. 10:04
21 февраля 2013 г. 9:54
Ответы
-
То, что вы делаете мало чего даст. Лучше чем тут, MSDN, вы не найдёте. Начните оттуда, там целый комплекс средств по оценке критериев производительности, плю используйте нагрузочные тесты Visual Studio. Но насколько я понял из предыдущих постов, у вас там данных сессии слишком много, скорее всего они и заполняют процесс. В среднем 200 МБ, это очень большая величина.
- Предложено в качестве ответа YatajgaModerator 16 марта 2013 г. 19:21
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 19 марта 2013 г. 8:58
21 февраля 2013 г. 15:26Модератор
Все ответы
-
То, что вы делаете мало чего даст. Лучше чем тут, MSDN, вы не найдёте. Начните оттуда, там целый комплекс средств по оценке критериев производительности, плю используйте нагрузочные тесты Visual Studio. Но насколько я понял из предыдущих постов, у вас там данных сессии слишком много, скорее всего они и заполняют процесс. В среднем 200 МБ, это очень большая величина.
- Предложено в качестве ответа YatajgaModerator 16 марта 2013 г. 19:21
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 19 марта 2013 г. 8:58
21 февраля 2013 г. 15:26Модератор -
Ок. Спасибо.
Мне немного уже помогли. Я не знал, что процесс называется w3wp. Его анализ в Process Explorer уже кое-что проясняет.
Приложение без всяких пользователей, на старте требует 80-90 Мб. С увеличением количества пользователей не всё понятно. Иногда при присоединении нового пользователя увеличение потребления памяти незначительное в пределах одного мегабайта, а иногда запускается дополнительный процесс с таким же названием w3wp и соответственно потреблением своих 80-90 Мб. Понятно, что если случайно появится ещё один процесс то 200 Мб будут превышены. Причина появления новго процесса не понятна. Иммитировал на нескольких проводниках, но от количства клиентов появится новый процесс или нет не зависит.
Сессии хранятся в базе и там на самом деле не много. до мегабайта на пользователя.
Насчёт 200 Мб - хостеры рекамендуют всем пользователям Orchard сразу запускаться на Unlim потому что эта CMS легко превышает 200. У нас достаточно сложное приложение - почти онлайн бухгалтерия.
Спасибо за ссылку.
21 февраля 2013 г. 20:47 -
22 февраля 2013 г. 6:43
-
Спасибо. У нас не Orchard. Это я как пример по поводу того, что 200 Мб это много.22 февраля 2013 г. 7:11
-
Обнаружил в Project Explorer резкое увеличение значения Working Set до 350 Мб для своего процесса w3wp.
При этом значение Private Bytes оставалось на уровне 80 Мб.
Сделал дамп в этот момент. Размер файла 350 Мб.
Пытаюсь смотреть windbg !EEHeap и нахожу там только две кучи общим размером 23 Мб.
Подскажите, как, какой командой посмотреть кто занимает остальное место?
25 февраля 2013 г. 17:17 -
Нашёл ответ о причине резкого увеличения Working Set http://stackoverflow.com/a/2234999/1072896
Но вопрос о структуре дампа остался. Что там ещё кроме куч?
26 февраля 2013 г. 6:33 -
Продолжая исследовать выявил следущую странность.
Создал в студии пустое приложение Web.forms.
Откомпилировал, собрал в пакет и пакетным способом выгрузил в отдельный пул приложения на IIS.
Запустил default.aspx и стал следить за памятью.
Виртуальной около 60 000 кБ
Рабочий набор около 10 000 кБ.
Видимо это минимальные резервные требования.
И тут бах - виртуальная 500 000 кБ!!!, рабочий набор 100 000 кБ!!! При этом ничего не происходит и не может происходить.
Такое потребление и осталось. После нескольких перегрузок пула опустилось до старых значений и больше не вырастало.
Вот у кого спрашивать что это за хрень такая?
Повторю - пустое приложение.
5 марта 2013 г. 21:36 -
Это не очень то и нормальное поведение, если всё в точности так, как описано. Попробуйте проанализировать процесс с помощью профайлера, к сожалению он платный, хотя и есть 10 дневный пробный период.8 марта 2013 г. 18:38Модератор