如何确定Web应用程序的会话数量是多少

时间:2016-07-20 22:27:56

标签: java jboss timeout session-timeout

我有运行Oracle Commerce的Jboss应用服务器。我在任何给定时间都有5个页面服务实例[VM服务器]和大约300个用户浏览站点。我试图为会话超时提供一个数字,以便客户有足够的时间浏览和结账,但是也不希望有太多的开放会话会占用内存。所以我的问题是有一个经验法则来确定会话超时吗?

Jboss 7,Java 7,每个jvm有8GB内存。目前会话超时设置为10分钟。想把它增加到30分钟。

3 个答案:

答案 0 :(得分:1)

以下是我能想到的事情: - 会话大小。 - 线程池 - 要作为服务器的并发线程数。这可以由应用程序服务器配置。有几个可用于JBoss的线程池,例如,对于EJB容器,servlet容器有几个池,依此类推。你可以在这里阅读一些细节。 https://developer.jboss.org/wiki/ThreadPoolConfiguration#jive_content_id_Deploying_Threading_Components - 你的用例。您期望的并发用户数。

如果线程用尽,所有进一步的请求都将排队(我认为这在某种程度上取决于Executor),但在一般情况下就是这样。这给记忆带来了压力。所以你不应该超过最大池大小。

会话的大小和您期望的并发用户数将帮助您了解内存随时间的增长情况。 您应该考虑选择时间以及过去几年网站使用情况的增长情况。

在这里应该注意的是,由于你有在线应用程序,你应该更喜欢小的HEAP大小而不是大的堆大小,因为垃圾收集器。使用新的G1垃圾收集器可能是个好主意。

根据上次评论进行修改: 在Profiler的帮助下,在没有非常高精度的情况下测量堆的一种天真的方法是:  1.启动服务器,对单个用户进行测试运行,以初始化所有类。  2.强制收集garbadge并采取基准  3.运行大量并行用户样本并观察峰值内存以及当达到拾取内存时GC可以释放多少(再次强制GC)。

现在这是一种天真的做法。

更复杂的方法是在一些对象分配监控工具的帮助下计算会话的大小(再次使用分析器)。

答案 1 :(得分:0)

此外,您应该考虑通过启用GC日志来检查JVM的内存。当它用尽时它会给出一个好主意。 另一个指标是CPU利用率。它取决于用户活动和应用程序所需的内容,如果你有足够的内存,只要你有足够的CPU能力来处理请求,就可以增加并行会话的数量。

答案 2 :(得分:-1)

(我知道这是一篇旧文章,但这可能会对某人有所帮助)

Cdesai,

如果要为用户提供足够的时间浏览和签出而不用担心超时,则可以考虑使用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的解决方案here