2013-07-08 10 views
3

У нас запуталась странная проблема. Наше приложение ASP.NET работает на 64-битной машине Windows 2008/IIS7 с 16 ГБ ОЗУ. Когда процесс w3wp.exe достигает 4Gb (мы отслеживаем его просто через диспетчер задач на сервере) - Недостаточно памяти Исключение выбрано, хотя доступно еще много памяти.У w3wp.exe заканчивается память, хотя есть еще доступная память

Есть ли известная проблема: процесс ASP.NET ограничен 4 ГБ памяти на 64-битной системе (и с использованием 64-битного пула приложений)?

Есть ли способ поднять этот предел?

+0

если пул приложений превышает 1 ГБ ОЗУ, который обычно опасен, я узнал. Общие рекомендации, которые я прочитал, должны содержать <1 ГБ. Проверьте, не влияет ли ваша доступная память на пул приложений. Возможно, вам придется посмотреть на балансировку нагрузки или выяснить, какой процесс в вашем приложении .NET убегает. Собирайте неиспользуемые ресурсы, а также обязательно удаляйте ресурсы по мере необходимости. Существуют ли и другие пулы приложений, запущенные на этом сервере? SharePoint? – ApolloSoftware

+0

@AmitApollo благодарит за ответ. Да, я знаю о последствиях злоупотребления памятью, и я работаю над определением возможных причин. Тем временем мне действительно нужно, чтобы этот процесс ASP.NET мог переместиться на 4 ГБ ОЗУ. Есть идеи? На этом сервере работают другие пулы приложений, но ничего такого интенсивного, как это приложение. И нет никакой доли. И память не остается такой высокой только в пиках, она идет вниз, но мне нужно, чтобы она могла преодолеть этот предел. –

+0

Вы построили это под настраиваемой конфигурацией, которая специально предназначает «32-битную архитектуру» или это конфигурация «Любой процессор»? –

ответ

1

Это похоже на то, что у вас есть неразмещенный ресурс где-то, что в конечном итоге приводит к сбору мусора, но недостаточно быстро для ваших нужд. Вы повторно используете какие-либо объекты SQLConnection? Или объекты MailClient? Или неуправляемые объекты изображения?

Что касается нижнего предела памяти, использование приложения ASP.NET использует два типа памяти. Одна из них - зарезервированная память, а другая - фактически используемая память. Я считаю, что диспетчер задач отслеживает фактическое использование памяти, но у зарезервированной памяти, вероятно, также есть предел. Чтобы узнать, сколько зарезервированной памяти занимает ваш процесс, перейдите в IIS7, нажмите на сервер (верхний уровень, над панелью приложений и папку сайтов), затем нажмите «Процессы», а затем щелкните процесс вашего приложения. Он должен показать вам использование ЦП, количество запросов и использование памяти (как зарезервированных, так и фактических).

Смежные вопросы