ASP.NET ли принудительно перезапускает кэш приложения / сеанса? - PullRequest
1 голос
/ 21 ноября 2011

Я хочу, чтобы это было больше обсуждением, чем что-либо.

Так что у меня есть веб-сайт www.utopiapimp.com.Сейчас он получает более 1 миллиона просмотров страниц в день.На этом сайте много динамических данных, которые постоянно меняются.Подумайте «живая биржа», но для онлайн-игры.Я столкнулся с глубоким препятствием.

Я загружаю несколько статических элементов из базы данных при запуске веб-приложения, но после этого каждый раз, когда пользователь входит в систему, я выполняю вызовы этого пользователя в 15 дБ и помещаю весь этот объект в кеш из этих15 дБ звонков.На моем мониторе сервера я вижу свои 4 ГБ оперативной памяти медленно, всего до 2 ГБ.Потом что-то происходит, и я не знаю что.

1-ядерный VPS CPU начинает работать на 25% вечно.Иногда скорость обработки превышает 50%.Но примерно через 20 минут 2 ГБ или оперативная память внезапно падает до 400 МГ, чтобы никогда не восстановиться.

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

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

Я довольно одержим этой проблемой и, похоже, не могу найти решение.

Возможно, обновление до лучшего vpsможет сработать, но я не хочу почти обновляться, чтобы найти там ту же проблему.

Любые предложения по помощи pr были бы блестящими, потому что я боролся за это на прошлой неделе, и мои пользователи действительно стараютсядля решения.

РЕДАКТИРОВАТЬ

Я связался с моей хостинговой компанией и ждал ответа.Любые другие предложения или идеи будут с благодарностью ...

большое спасибо!

1 Ответ

1 голос
/ 21 ноября 2011

Раздел processmodel в machine.config содержит параметр memoryLimit, который обычно составляет 60% доступной памяти.Может быть, это вызывает перезагрузку вашего пула приложений.Попробуйте увеличить количество, чтобы увидеть, если это вызывает сброс.

<processModel ...
          memoryLimit="60"
/>

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

РЕДАКТИРОВАТЬ: Если вы храните огромные данные в сеансе, необходимая память увеличивается с каждым пользователем.После истечения времени ожидания необходимая память будет уменьшена.Вы всегда должны стараться не хранить слишком много данных в сеансе.

...