Память Asp.net вздулась неожиданно - PullRequest
1 голос
/ 14 июня 2011

У нас есть приложение Asp.NET, содержащее всю логику нашего сервера. Это приложение только вмещает услуги (без страниц).

По какой-то причине через некоторое время потребление памяти процессом w3wp.exe начинает расти. Он увеличивается за считанные секунды до максимально возможного размера (на моем сервере до 10 гигабайт).

Это происходит неожиданно, поэтому мы не можем по-настоящему воссоздать по требованию.

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

Любая помощь будет оценена. Daniel

Ответы [ 4 ]

2 голосов
/ 14 июня 2011

Здесь много хороших ответов об отладке.

Еще один способ решения этой проблемы - использование обзора кода.

Существует множество способов утечки памяти в программе.Но утечка нескольких ГБ за несколько секунд почти наверняка связана с циклом в вашем коде.

Итак:

  • Определите все циклы в вашем коде
  • сначала посмотрите, можете ли вы увидеть проблему, просто взглянув на нее
  • , если не выполнить регистрационный вызов, который будет регистрировать каждую итерацию
  • развернуть и ждать следующего раза, когда это произойдет
  • проверьте журналы, чтобы увидеть, где находится цикл убегания
2 голосов
/ 14 июня 2011

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

Несколько простых вещей, которые нужно проверить:

  1. Вы выделяетеIDisposable объекты (HttpWebRequest, объекты WCF, все, что использует неуправляемые ресурсы или небезопасный код) и не утилизируют их?в оперативную память?(Маловероятно) Проверьте использование памяти вокруг любого кода LINQ, который манипулирует результатами SQL.

1 голос
/ 14 июня 2011

Если вы можете добиться этого в среде разработки, вы должны иметь возможность использовать встроенные в Visual Studio инструменты профилирования для отслеживания проблемы.

Если это происходит только в вашей производственной среде, проверьте это: https://rpm.newrelic.com

0 голосов
/ 14 июня 2011

Блог Тесс Феррандез - отличный ресурс для отладки ASP.NET:

Существуют различные способы захвата дампа памяти, который можно проверить с помощью WinDbg и SOS в автономном режиме:

http://www.wintellect.com/CS/blogs/jrobbins/archive/2010/06/17/how-to-capture-a-minidump-let-me-count-the-ways.aspx

...