如何确定有多少会话对于web应用程序来说太多



我有运行Oracle Commerce的Jboss应用程序服务器。我有5个页面服务实例[VM服务器]和大约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大小,而不是大的HEAP大小,因为有垃圾收集器。使用新的G1垃圾回收器可能是个好主意。

根据最后一条评论进行编辑:借助探查器在没有很高精度的情况下测量堆的一种简单方法是:1.启动服务器,对单个用户进行测试运行,以便初始化所有类。2.强制垃圾收集并树立标杆3.为大量并行用户运行,观察峰值内存,以及当达到pick内存时GC能够释放多少内存(再次强制GC)。

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

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

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

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

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的解决方案

相关内容

  • 没有找到相关文章

最新更新