ASP.NET ли принудительно перезапускает кэш приложения / сеанса?

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

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

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

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

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

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

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

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

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

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

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

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

1 ответ

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

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

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

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

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