Есть ли утечка памяти на моем сайте?

У меня есть веб-сайт, который подготовлен с ASP.NET MVC 3 и Entity Framework 4.1. Это изображение ниже - журналы perfmon моего сервера.

Моя проблема w3wp.exe становится все больше и больше с каждой минутой и никогда не отпускает. Я использую LINQ to Entities в своих запросах, и все мои коды структуры сущностей находятся в блоке using.

Я думаю, что это проблема сбора мусора, но я не уверен. В чем моя проблема и как я могу это исправить?

Изображение Perfmon Logs о моей проблеме

2 ответа

Все зависит от того, что делает ваш веб-сайт. У нас есть.NET-серверы, работающие на 32 ГБ оперативной памяти, и рабочий процесс с радостью принимает все, что хочет Это действительно нужно.

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

Правильно ли закрыты строки подключения, считыватели, файловый ввод-вывод и т. Д.?

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

Обновление 1:

Происходит то, что рабочий процесс ASP.NET создает буфер. Когда он достигает определенного объема используемой памяти, он со временем уменьшается, но ему нравится выделять память, поэтому он не должен изо всех сил извлекать ее, когда это необходимо.

Вы должны запустить профилировщик, чтобы увидеть, какие процессы и потоки выходят из-под контроля. В Visual Studio 2010 есть несколько хороших инструментов для профилирования, и я уверен, что есть и другие сторонние.

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

Другие вопросы по тегам