共享JVM会话

时间:2014-09-22 10:57:43

标签: java spring session spring-mvc jvm

我有一个java应用程序,使用JVM作为会话存储。但最近当一定数量的用户超过时。申请失败了。 JVM内存不足。

我想添加新的应用服务器也想使用负载均衡器,但由于会话依赖于JVM,我无法与其他应用服务器共享。

如果我可以专门为JVM会话使用一个JVM实例并通过多个应用服务器访问它,那将会很棒。我能做到这一点吗?

我在项目中使用Java Spring。我的计划可以满足很多用户的要求吗?

提前致谢。

3 个答案:

答案 0 :(得分:1)

有一个名为Terracotta的第三方应用程序。我尝试过它,适用于Spring Application。

您可以从下面的链接中找到配置详细信息。

  

http://www.terracotta.org/documentation/4.1/terracotta-server-array/introduction

如果需要任何帮助,请发表评论。

答案 1 :(得分:0)

首先确保您知道内存不足的原因。如果它与拥有多个会话确实相关,您可能希望更改会话的管理方式。您可以将其保存到数据库中,而不是将会话保留在内存中。在这种方法中,您将减少内存,并且在添加其他计算机之后,会话将不会与其中任何一个相关联。

答案 2 :(得分:0)

听起来你在内存中持有(大量)会话数据......出于性能原因。

  

我的计划可以满足很多用户的要求吗?

最终你将用完:

  • 用于将所有会话数据保存在一个JVM中的物理内存,或

  • CPU和I / O带宽,以满足来自其他应用程序服务器的会话数据请求,和/或

  • 用于简单管理数据的CPU资源。 (提示:完成GC的时间与可达数据的总量成正比。)

如果您的架构使用单个JVM来存储所有会话数据,那么您最终会遇到问题。这表明您应该可以复制系统的这一部分。但是,如果没有对应用程序进行更深入的分析以及真正的对可伸缩性的需求,则无法建议最好的方法...

结论:对于可扩展性,没有简单的“一刀切”解决方案。