我有一個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