2014-09-22 148 views
0

我有一个Java应用程序,使用JVM作为会话存储。但是最近有一定数量的用户超过了。应用程序关闭。 JVM内存不足。共享JVM会话

我想添加新的应用程序服务器也想使用负载平衡器,但由于会话是依赖于JVM的,我不能与其他应用程序服务器共享它。

如果我可以专门为JVM会话使用一个JVM实例并通过多个应用程序服务器访问它,那将是一件好事。我该怎么做?

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

在此先感谢。

+0

会话存储是什么意思? – 2014-09-22 11:05:42

+0

我正在将会话数据保存到JVM中 – arnold 2014-09-22 11:11:48

回答

0

首先确保您知道内存不足的原因是什么。如果它确实与多次会话有关,则可能需要更改会话的管理方式。可以将会话保存在内存中,而不是将其保存到数据库中。在这种方法中,您可以减少内存,并且在添加其他机器之后,会话将不会与其中的任何一个绑定。

+0

在数据库中保存会话不是一种选择,应用程序需要快速加载数据,如果将数据保存到数据库中,这是不可能的。 – arnold 2014-09-22 11:19:13

0

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

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

最终你会用完:

  • 的物理内存来容纳所有的会话数据在一个JVM,或

  • CPU和I/O带宽,以满足该请求来自其他应用服务器的会话数据,和/或用于简单地管理数据的CPU资源,和/或用于简单管理数据的CPU资源。 (提示:做一个完整的GC所花费的时间是成正比的可达数据总量)

如果您的架构使用单个JVM的所有会话数据,你将最终碰了壁。这表明你应该可以复制你的系统的那一部分。但是,不可能建议最好的方法来做到这一点...没有对应用程序进行更深入的分析......并且需要可扩展性的真实。底线:没有简单的适合所有可伸缩性的解决方案。

+0

分区JVM内存可能吗? – arnold 2014-09-22 12:02:55

+0

@arnold - 不,它不是。 – 2014-09-22 12:19:20