0

什么是tomcat中的活动会话。我正在尝试监视 Java Web 应用程序的活动会话。但是我得到的值与使用 Web 应用程序的人数不匹配。你能解释一下吗?

4

1 回答 1

0

基本上,活动会话的数量是现有或以前的浏览器或具有唯一 jSESSIONID cookie 值的其他连接的数量。一旦有人使用浏览器访问您的网页,就会启动一个新会话,并为该会话分配一个唯一的 JSESSIONID。如果使用相同的 JSESSIONID(作为 cookie 或 url 参数传输)执行下一次命中,则会话计数保持不变。如果未传输参数,则创建新会话。通常,所有浏览器都会在多个请求甚至多个选项卡或窗口(当然,隐身选项卡/窗口除外)中保留会话 ID cookie。

会话数大于用户数的原因有多种。

  • 会话在 tomcat 中举行一段时间,默认为 2 小时。您可以在 tomcat 设置中更改此数量。因此,如果第一个小时有 100 个用户登录到您的应用程序,第二个小时有 100 个用户登录,那么即使前 100 个用户处于空闲状态,您的总会话数也将是 200。
  • 像谷歌机器人这样的机器人往往会创建大量的会话。如果您的页面是公开可用的,请检查访问日志是否有一些机器人访问您的页面。

  • 如果您的应用程序位于负载均衡器或代理之后,它们会不断地“ping”您的应用程序以确保其可用性,则此 ping 也可以创建会话。

  • 最后,您的应用程序可以通过许多“有趣”的方式从浏览器获取请求,例如搜索结果预取等。
  • 另请记住,会话绑定到站点的域名。因此,如果用户通过多个域(例如 www.domain.com 用于内容,static.domain.com 用于图像)连接到您的站点,则每个连接都会有自己的会话。

现在,有不同的方法可以防止创建不需要的会话,具体取决于您的确切问题(以及是否存在问题)。

  • 如果您的应用程序的某些部分不需要会话,请确保您不要request.getSession()在代码中的某处调用。同样在jsp中,您可以显式关闭会话<%@ page session="false" %>
  • 会话超时较低,以使它们在 tomcat/conf/web.xml 中更快地过期<session-config><session-timeout>30</session-timeout></session-config> 。会话超时值以分钟为单位。

最后,如果您对应用程序中真正发生的事情感兴趣,请为自己准备一个 APM(应用程序性能管理)工具,例如MoSKito

问候莱昂

于 2016-10-11T13:14:41.583 回答