Задать вопрос
@DevStranger

ASP.NET MVC. Сколько памяти потребляет стандартное приложение в нормальных условиях?

Добрый день. Вопрос к знающим людям. Есть asp.net mvc приложение. Сколько памяти такое приложение должно потреблять? В нем используются следующие технологии:
  1. Entity Framework
  2. Asp.Net Identity
  3. Bundles (AspNet.Web.Optimization)
  4. Owin
  5. Ninject
  6. NLog

Сайт выполняет операции: CRUD, прием заявок с сайта, чтение excel-файлов, ну и показывает информацию пользователю (статьи, новости, отзывы и т.д.).

JetBrains DotMemory показывает мне, что в целом используется около 250мб памяти, из них unmanaged memory - 160мб. Вот скрины:
5ab40058c5766795805652.jpeg5ab400611b807604460479.jpeg

Мониторил приложение во время работы, резких скачков или утечек памяти не обнаружил, сайт в принципе простой, супер сложных операций или вычислений в нем нет, которые ориентированы на память.

250мб - это вообще много или нормально для asp.net mvc? Просто сегодня попробовал новый виртуальный хостинг, а там стоит лимит на выделенную для пула виртуальную память. И по логам видно, что через некоторое время:
A worker process with process id of '42024' serving application pool 'xxxxxxxxxx(domain)(4.0)(pool)' has requested a recycle because it reached its virtual memory limit.


Спасибо.
  • Вопрос задан
  • 506 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
DarkRaven
@DarkRaven
разработка программного обеспечения
На данный вопрос ответите только Вы, т.к. мы ничего не знаем о Вашем сайте (т.е., что за классы, сколько, что за свойства, как много аллокаций, что загружает приложение и т.д.).
Опять же, обратите внимание на то, что у Вас строки в топе - это говорит о том, что у Вас происходит много манипуляций со строками, что порождает новые объект строк. Нельзя сказать, что это плохо или хорошо - это просто особенность строк. Если вы что-то делаете со строками (парсинг, поиск/замена/и/т./п) - попробуйте перейти на Span или StringBuilder.

Вообще, по поводу потребления на пике - сделайте нагрузочное тестирование, на 100 пользователей, которые параллельно выполняют определенные действия (вход в систему, загружают данные, просматриваю новости и т.п.). Тестировать можно через JMeter, но. простое тупое тестирование можно сделать через ab.

P.S. Рекомендую обратить внимание на https://github.com/danielpalme/IocPerformance , я, как бывший "апологет" ninject, рекомендую пересмотреть отношение к нему, он весьма неэффективен в плане быстродействия. Уже не помню по поводу затрат на память, но переход после него на autofac был как глоток свежего воздуха.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@kttotto
пофиг на чем писать
Странно поставлен вопрос. Что значит стандартные условия и нормальное приложение? То, что Вы стек перечислили, ничего не говорит.
У Вас есть какая то логика, эта логика создает объекты. Вы грузите данные, эти данные занимают оперативку в памяти. Какого размера объекты, сколько их, какого размера данными Вы оперируете? Вот на это и смотрите. Избегайте лишних алокаций, следите за большими объектами (больше 85 000 байт), в случае чего вовремя вызывая чистку GC.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы