簡體   English   中英

如何確定Web應用程序的會話數過多

[英]How to determine as to how many sessions are too many for a web application

我有運行Oracle Commerce的Jboss應用服務器。 我有5個頁面服務實例[VM Servers],並且在任何給定時間都有大約300個用戶在瀏覽網站。 我正在嘗試為會話超時提供一個數字,以便客戶有足夠的時間瀏覽和簽出,但同時也不要太多打開的會話來占用內存。 所以我的問題是確定會話超時的經驗法則嗎?

Jboss 7,Java 7,每個jvm具有8GB內存。 當前會話超時設置為10分鍾。 希望將其增加到30分鍾。

這是我能想到的事情:-會話大小。 -線程池-要作為服務器的並發線程數。 這可以由應用程序服務器配置。 JBoss有多個線程池可用,例如,您有多個servlet容器的池,這些池分別與EJB容器分開,依此類推。 您可以在此處閱讀一些詳細信息。 https://developer.jboss.org/wiki/ThreadPoolConfiguration#jive_content_id_Deploying_Threading_Components-您的用例。 您期望多少個並發用戶。

如果線程用完了,所有其他請求都將排隊(我認為這在某種程度上取決於Executor),但通常情況下就是這樣。 這給存儲器帶來了壓力。 因此,您不應在最大池大小以上進行操作。

會話的大小和您期望的並發用戶數將幫助您確定內存隨時間增長的方式。 您應考慮挑選時間以及最近幾年網站使用量的增長情況。

在這里應該注意的是,由於您具有在線應用程序,因此由於垃圾回收器的原因,您應該更喜歡小HEAP大小而不是大堆大小。 使用新的G1垃圾收集器可能是個好主意。

根據最新評論進行編輯:在探查器的幫助下,一種沒有很強的精度來測量堆的簡單方法是:1.啟動服務器,以單個用戶進行測試運行以初始化所有類。 2.強制垃圾收集並進行基准測試。3.為大量並行用戶樣本運行,並觀察您的峰值內存以及達到選擇內存后GC可以釋放的容量(再次強制GC)。

現在,這是一種幼稚的方法。

一種更復雜的方法是借助某些對象分配監視工具(再次使用事件探查器)來計算會話的大小。

另外,您應該考慮通過啟用GC日志記錄來檢查JVM的內存。 精疲力盡時,這將是一個好主意。 另一個指標是CPU利用率。 這取決於用戶活動和應用程序需要什么,如果您有足夠的內存,只要您有足夠的CPU能力來處理請求,就可以增加並行會話的數量。

(我知道這是一個舊帖子,但這可能會對某人有所幫助)

克德賽

如果要為用戶提供足夠的時間來瀏覽和簽出而不用擔心超時,則可以考慮使用JavaScript來保持會話的活動狀態。 只要窗口打開並且javascript正在運行,會話就保持活動狀態。 窗口關閉或導航后,您的會話超時將繼續倒計時。 如果用戶回來並且會話超時尚未到期,則Javascript將對服務器執行ping操作以重新開始倒計時。 這也有助於使過多的活動會話陷入服務器癱瘓。 我使用類似的設置,但會話超時設置為5分鍾,設置為低,而keepAlive函數的間隔為兩分鍾。

 function keepAlive() { var httpRequest = new XMLHttpRequest(); httpRequest.open('GET', "/restricted_file_url"); httpRequest.send(null); } setInterval(keepAlive, 840000); //My session expires at 15 minutes 

在這里查看Ivar的解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM