我有一个Java应用程序,使用JVM作为会话存储。但是最近有一定数量的用户超过了。应用程序关闭。 JVM内存不足。共享JVM会话
我想添加新的应用程序服务器也想使用负载平衡器,但由于会话是依赖于JVM的,我不能与其他应用程序服务器共享它。
如果我可以专门为JVM会话使用一个JVM实例并通过多个应用程序服务器访问它,那将是一件好事。我该怎么做?
我在项目中使用Java Spring。我的计划是否可以满足很多用户的要求?
在此先感谢。
我有一个Java应用程序,使用JVM作为会话存储。但是最近有一定数量的用户超过了。应用程序关闭。 JVM内存不足。共享JVM会话
我想添加新的应用程序服务器也想使用负载平衡器,但由于会话是依赖于JVM的,我不能与其他应用程序服务器共享它。
如果我可以专门为JVM会话使用一个JVM实例并通过多个应用程序服务器访问它,那将是一件好事。我该怎么做?
我在项目中使用Java Spring。我的计划是否可以满足很多用户的要求?
在此先感谢。
有一个叫做Terracotta的第三方应用程序。我试过了,对于Spring应用程序工作得很好。
你可以从下面的链接找到配置细节。
http://www.terracotta.org/documentation/4.1/terracotta-server-array/introduction
加注释,如果需要任何帮助。
首先确保您知道内存不足的原因是什么。如果它确实与多次会话有关,则可能需要更改会话的管理方式。可以将会话保存在内存中,而不是将其保存到数据库中。在这种方法中,您可以减少内存,并且在添加其他机器之后,会话将不会与其中的任何一个绑定。
在数据库中保存会话不是一种选择,应用程序需要快速加载数据,如果将数据保存到数据库中,这是不可能的。 – arnold 2014-09-22 11:19:13
听起来就像你在内存中保存(大量)会话数据......出于性能原因。
我的计划可以满足很多用户的要求吗?
最终你会用完:
的物理内存来容纳所有的会话数据在一个JVM,或
CPU和I/O带宽,以满足该请求来自其他应用服务器的会话数据,和/或用于简单地管理数据的CPU资源,和/或用于简单管理数据的CPU资源。 (提示:做一个完整的GC所花费的时间是成正比的可达数据总量)
如果您的架构使用单个JVM的所有会话数据,你将最终碰了壁。这表明你应该可以复制你的系统的那一部分。但是,不可能建议最好的方法来做到这一点...没有对应用程序进行更深入的分析......并且需要可扩展性的真实。底线:没有简单的适合所有可伸缩性的解决方案。
分区JVM内存可能吗? – arnold 2014-09-22 12:02:55
@arnold - 不,它不是。 – 2014-09-22 12:19:20
会话存储是什么意思? – 2014-09-22 11:05:42
我正在将会话数据保存到JVM中 – arnold 2014-09-22 11:11:48