2008-11-30 4 views
9

У меня есть приложение ASP.NET, и на производственной коробке он использует около 450 МБ ОЗУ, однако он не должен использовать достаточно много, и, похоже, он увеличивается со временем, поэтому кажется, что может произойти утечка или, по крайней мере, что-то не выпущенное должным образом.Идентификация проблем с памятью в приложении ASP.NET

Я взглянул на PerfMon, и в GC Gen2 было 416 МБ.

У кого-нибудь есть идея узнать, что он хранит в памяти? Могу ли я просто захватить dotTrace/ANTS и как-то привязать его к моему IIS (6 - на сервере Windows 2003) - или есть лучший способ? :-)

Спасибо.

ответ

2

Просмотр this TecheEd презентация Tess будет хорошим началом.

Она демонстрирует использование adplus для создания дампа приложения ASP.NET, которое потребляет большое количество ОЗУ, а затем загружает этот дамп в WinDbg для анализа. Используйте команду! Gcroot в WinDbg, чтобы найти неожиданные корни и перейти оттуда. Она советует не хранить сложные типы, содержащие ссылки на другие объекты в кеше или сеансе.

+1

Презентация была действительно полезна - я уже чувствую, что у меня гораздо больше понимания. – RasmusKL 2008-12-01 21:45:18

+0

+1 для вашего использования слова «дамп» здесь. – 2010-10-03 05:01:58

1

Хотя это специфический блог о технологии вы, вероятно, не используя его же покрытие, как диагностировать проблемы с памятью - http://blogs.msdn.com/tess/archive/2008/09/12/asp-net-memory-issues-high-memory-usage-with-ajaxpro.aspx

Dig через работу Тесс, у нее есть много отладки/диагностики сообщений и я Вы уверены, что можете найти больше, которые вам полезны.

0

Вы правильно распоряжаетесь объектами классов, которые реализуют IDisposable? Это будет включать SqlConnections, SqlCommand, SqlDataAdapter, DirectoryEntry и т. Д. Есть ли у вас объекты, которые используют неуправляемую память, которые не реализуют IDisposable (и/или не удаляются)?

+0

Да, я уверен, что я :-) – RasmusKL 2008-12-01 08:16:04

0

Я уверен, что вы прошли через все движения уже к настоящему времени, но у меня была аналогичная проблема на сайте, который я поддерживаю.

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

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

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

Последнее, но не менее важно проверить, какой тип провайдера сеанса вы используете, если inproc слишком сильно нагружает сервер, возможно, пришло время перейти на сеанс сеанса состояния asp.net или использовать SQL-сервер в качестве сеанса поставщик.

Дайте мне знать, что вы думаете, а если найдете и уточните.

3

Классическая проблема создания последовательности строк в цикле может вызвать проблему, которую вы видите из-за того, что большие объемы памяти выделяются для новых строк, не выпуская их. Используете ли вы StringBuilder, где это необходимо?

1

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

Смежные вопросы