2014-09-22 139 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