2014-09-22 6 views
0

У меня есть приложение java, использующее JVM в качестве хранилища сеансов. Но недавно, когда определенное количество пользователей превышает. Приложение не работает. У JVM заканчивается память.Совместное использование сеанса JVM

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

Было бы здорово, если бы я мог использовать один экземпляр JVM специально для сеанса JVM и получить к нему доступ через несколько серверов приложений. Как я могу это сделать?

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

Заранее спасибо.

+0

что вы подразумеваете под сессию хранение? –

+0

Я сохраняю данные сеанса в JVM – arnold

ответ

0

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

+0

Сохранение сеанса в БД не является выбором, приложение должно быстро загружать данные, что невозможно, если оно сохраняется в БД. – arnold

0

Звучит так, будто вы держите (большое количество) данные сессии в памяти ... по соображениям производительности.

Является ли мой план одобренным для множества запросов пользователей?

В конечном итоге вы будете бежать из:

  • физической памяти для хранения всех данных сессии в одной виртуальной машины Java, или

  • CPU и I/полосы пропускания O, чтобы удовлетворить запросы на данные сеанса с других серверов приложений и/или

  • Ресурсы процессора для простого управления данными. (Подсказка:. Время, необходимое, чтобы сделать полный GC пропорционально общей сумме на достижимых данных)

Если ваша архитектура использует одну JVM для всех данных сессии, то в конечном итоге врезался в стену. Это говорит о том, что вы должны позволить воспроизвести эту часть вашей системы. Тем не менее, невозможно предложить лучший способ сделать это ... без более глубокого анализа вашего приложения ... и его real необходимо для масштабируемости.

Подводя итог: нет простых решений для масштабируемости одного размера.

+0

Возможно ли разделение памяти JVM? – arnold

+0

@arnold - Нет, это не так. –

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