Проблемы с памятью в ASP.NET - PullRequest
0 голосов
/ 12 ноября 2010

У меня проблемы с памятью в приложении asp.net.Проблема в том, что я не вижу никаких проблем при его локальном запуске (между 100-200 МБ), но в производственной системе я получаю 503 ошибки из-за того, что достигнут предел памяти (512 МБ) (при запуске на виртуальном хостинге).1001 *

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

У меня нет абсолютно никакого опыта отслеживания утечек памяти.:)

Спасибо

Ответы [ 4 ]

3 голосов
/ 12 ноября 2010

Использовать пробную версию RedGate's Memory Profiler

http://www.red -gate.com / products / ants_memory_profiler / index.htm? Utm_source = google & utm_medium = cpc & utm_content = unmet_need & utm_campaign = & jmjJHjjjjjjjjjljjjjjjbj

или JetBrains dotTrace

http://www.jetbrains.com/profiler/

Оба инструмента очень просты и просты в использовании и отлично справляются с выявлением протонных утечек памяти и т. Д.

Наиболее распространенными источниками утечек являются пропущенные вызовы утилизации или плохое управление обработчиками событий ... в зависимости от размера вашей кодовой базы, вы можете просто «обнаружить» проблемные места, но я считаю, что использование инструмента ускоряетпроцесс в значительной степени, поскольку оба будут представлять снимки графиков объектов до / после, чтобы вы могли видеть, что очищается и не очищается с помощью GC.

Хороший обзор управления памятью: http://msdn.microsoft.com/en-us/library/ee817660.aspx

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

Я не знаю, что это полностью подотчетно здесь, но вот вам начало ... Другие ответы касаются конкретных проблем с памятью, но, во-первых, вам нужно понять, как память выделяется и освобождается (зарезервировано, используется и выпущен) компьютером, средой выполнения .NET и, в свою очередь, вашей программой.

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

На вашем месте я бы начал с этой статьи и планировал бы уделять больше времени исследованиям и изучению. К счастью, эта статья не только ответит на вопросы, но и даст вам достаточно знаний, чтобы задавать более конкретные / лучшие вопросы. Это хорошая статья, и я верю, что она действительно поможет вам, но это еще не все, что вам нужно. Здесь есть чему поучиться.

http://msdn.microsoft.com/en-us/magazine/cc188781.aspx

Эта статья немного устарела, и я предполагаю, что вы используете более свежие инструменты, поэтому, когда вы закончите переваривать эту статью, перейдите к http://msdn.microsoft.com/en-us/library/ms182372.aspx, чтобы узнать о Visual Studio Profiler.

0 голосов
/ 12 ноября 2010

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

Одна вещь, которую я нашел, помогает отследить этиПроблемы такого рода - встроить в ваше приложение какие-то инструменты.Это может начаться так же просто, как обеспечить кеш типа для отслеживания продолжительности запросов страниц.Это может быть достигнуто путем создания статического класса кэша для хранения всех (не рекомендуется) или просто долгосрочных запросов, которые вы определяете (более безопасный подход), и чтобы все они запускались в событиях OnBegin и OnEnd (HTTP-модуль был бы идеальным).Затем вы можете создать базовую страницу панели инструментов, чтобы перечислить содержимое кэша, чтобы увидеть возможные места для проблем.

0 голосов
/ 12 ноября 2010

Перво-наперво ... 503 не только из-за памяти.Если ваше приложение вылетает 5 раз за 5 минут, из-за быстрого сбоя пул приложений закрывается, и вы получаете ошибку 503 - Служба недоступна.

500 МБ нечетной памяти мне кажется немного меньше, и, следовательно, память может добавить к вашей проблеме.Если это ошибка 503, это означает, что вы решили проблему с точки зрения сбоя.http://blogs.msdn.com/b/rahulso/archive/2006/03/02/what-is-a-crash-technically-in-asp-net-and-what-to-do-if-it-happens.aspx

Если у вас проблемы с памятью, вы, как правило, получаете исключения «Недостаточно памяти», и в этом случае вы должны взять несколько дампов памяти вашего процесса (w3wp.exe) и проанализировать его.http://blogs.msdn.com/tess содержит много сообщений о том, как анализировать дампы памяти на предмет утечки памяти.Прямо сейчас было бы слишком рано называть это утечкой памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...