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

问题描述 投票:0回答:3

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

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

java jboss timeout session-timeout
3个回答
1
投票

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

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

会话的大小和您期望的并发用户数将帮助您了解您的记忆将如何随着时间的推移而增长。您应该考虑选择时间以及过去几年中网站使用情况的增长情况。

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

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

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

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


0
投票

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


-1
投票

(我知道这是一个老帖子,但这可能对某人有帮助)

在C,

如果您希望为用户提供足够的时间来浏览和结帐而不必担心超时,您可以考虑使用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

© www.soinside.com 2019 - 2024. All rights reserved.