Диагностика проблем "% времени в сборке мусора" - PullRequest
2 голосов
/ 19 декабря 2008

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

Ответы [ 6 ]

6 голосов
/ 19 декабря 2008

Я нашел лаборатории отладки на Блог Тесс Феррандез очень полезными при рассмотрении подобных проблем.

3 голосов
/ 19 декабря 2008

Начните с профилирования вашего приложения с помощью .Net CLR Profiler (у него отличный графический интерфейс для отображения собранных данных, и это БЕСПЛАТНО!). Конкретные инструкции по профилированию приложения ASP.Net можно найти здесь и , эта статья является хорошим обзором GC в отношении проблем с памятью / производительностью, профилирования и .Net CLR Profiler.

2 голосов
/ 19 декабря 2008

Попробуйте посмотреть, не переписал ли кто-то из вашей команды Dispose() методы для частого вызова GC.Collect(). Это случилось в моей команде, и это стало настолько плохо, что одному из Dispose() методов потребовалась 1 целая секунда, чтобы выполнить.

Это единственный способ представить, что ваш сервер тратит 40% своего времени на сборку мусора.

1 голос
/ 20 января 2009

Благодаря ответу Даррена я нашел эту статью в блоге Тесс Феррандес http://blogs.msdn.com/tess/archive/2006/06/22/643309.aspx, которая довольно хорошо описывает, как отследить подобные проблемы.

0 голосов
/ 29 декабря 2008

Я обнаружил, что GC использует 100% процессорного времени незадолго до сбоя всего приложения. Проблема была в «утечке объекта», когда мы просачивали по 20 Мб за раз. В конце концов, GC прекратил попытки, и память была исчерпана.

Вы можете видеть, как долго это делается с помощью perfmon, есть объект GC с довольно большим количеством счетчиков.

0 голосов
/ 19 декабря 2008

Ну, во-первых, мое колено трюка действует, и когда оно это делает, это либо означает, что он собирается идти снег, либо кто-то использовал много операторов "+" для конкатенации строк вместо использования StringBuilder в качестве добрый господин намеревался.

А как насчет ANTS Profiler ? Я использовал это некоторое время назад и мне понравилось. Существует также API профилирования , который вы можете использовать для сбора ваших собственных данных.

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