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 не хватает памяти и очищает кэш. Я использовал для создания страницы администратора, где я могу посмотреть, какие объекты в настоящее время хранятся в кэше.
РЕДАКТИРОВАТЬ: Если вы храните огромные данные в сеансе, необходимая память увеличивается с каждым пользователем. После истечения времени ожидания необходимая память будет уменьшена. Вы всегда должны стараться не хранить слишком много данных в сеансе.