繁体   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