У меня есть приложение ASP.NET 2.0, которое тратит слишком много времени на сборку мусора, более 40%, при нагрузочном тестировании на сервере производственного уровня (двухъядерный четырехъядерный процессор, 4g). Я пытался изолировать проблему, но это большая и сложная кодовая база, которая замедляет работу. Вызовов GC.Collect () нет. Какие инструменты, методы и т. д. Полезны при попытке изолировать этот тип проблемы?





Ну, во-первых, мое колено трюка действует, и когда это происходит, это либо означает, что скоро пойдет снег, либо кто-то использовал много операторов «+» для конкатенации строк вместо использования StringBuilder, как задумал добрый господин. .
А что насчет ANTS Profiler? Я использовал это некоторое время назад, и он мне понравился. Также есть Профилирование API, который вы можете использовать для сбора собственных данных.
Начните с профилирования вашего приложения с помощью .Net Профилировщик CLR (у него есть элегантный графический интерфейс для отображения собранных данных, и это БЕСПЛАТНО!). Можно найти конкретные инструкции по профилированию приложения ASP.Net. здесь и эта статья - хороший обзор GC в отношении проблем с памятью / производительностью, профилирования и профилировщика .Net CLR.
Попробуйте проверить, действительно ли кто-то из вашей команды переопределил методы Dispose() для частого вызова GC.Collect(). Это произошло в моей команде, и все стало настолько плохо, что выполнение одного из методов Dispose() заняло целую секунду.
Это единственный способ представить, как ваш сервер тратит 40% своего времени на сборку мусора.
Я нашел отладочные лаборатории на Блог Тесс Феррандес очень полезными при рассмотрении такого рода проблем.
Я обнаружил, что сборщик мусора использует 100% процессорного времени незадолго до того, как все приложение выйдет из строя. Проблема заключалась в «утечке объектов», когда мы пропускали 20 МБ за раз. В конце концов сборщик мусора отказался от попыток, и память была исчерпана.
Вы можете увидеть, как долго он это делает, используя perfmon, есть объект GC с довольно большим количеством счетчиков.
Это фантастический сайт. Этот вопрос на самом деле заставил меня подумать о blogs.msdn.com/tess/archive/2006/06/22/…, но вы меня опередили. :)