如何统计Spring Boot及外置Tomcat应用的在线连接用户数?
统计外置Tomcat应用的在线连接用户数
当然可以统计,下面分不同层面给出准确的方法,同时解释你用到的系统命令的局限性:
一、系统命令的准确性说明
你用的netstat -ano(Windows)或ps -ef | grep java(Linux)本身存在局限:
ps -ef | grep java仅能定位Tomcat进程,无法直接统计连接数。netstat返回的是端口的所有连接,包括未完成握手、TIME_WAIT状态的无效连接,不能直接等同于活跃用户连接。
如果想用系统命令统计已建立的有效连接,可以用更精准的命令:
- Linux 环境:
(替换8080为你的Tomcat HTTP端口)ss -t state established '( dport = :8080 or sport = :8080 )' | wc -l - Windows 环境(PowerShell):
注意:这类统计的是端口连接数,一个用户可能打开多个浏览器标签产生多个连接,所以不等于实际用户数。Get-NetTCPConnection -LocalPort 8080 -State Established | Measure-Object | Select-Object -ExpandProperty Count
二、Tomcat自带工具(更贴近实际用户数)
1. 管理控制台(Manager App)
启用Tomcat Manager后,访问http://<tomcat-ip>:<port>/manager/html,找到你的应用,查看Active Sessions字段,这是Tomcat维护的活跃HTTP会话数,更接近实际在线用户数(前提是应用基于HTTP Session跟踪用户)。
启用方法:修改conf/tomcat-users.xml,添加具备manager-gui角色的用户:
<user username="admin" password="your-password" roles="manager-gui"/>
2. JMX监控
通过JMX工具(如jconsole、jvisualvm)连接Tomcat,定位到MBean Catalina:type=Manager,context=/<你的应用名>,host=localhost,查看activeSessions属性值,支持自动化脚本统计。
3. 访问日志分析
Tomcat默认访问日志(logs/localhost_access_log.*.txt)包含会话ID(默认格式为%J),可以通过脚本统计唯一活跃会话数:
awk '{print $7}' logs/localhost_access_log.2024-05-20.txt | grep -v '-' | sort | uniq | wc -l
(替换日志文件名和字段位置,根据你的日志格式调整)
三、应用层自定义统计(精准区分用户)
如果需要统计已登录用户数而非会话数,可以在应用内实现:
- 注册
HttpSessionListener,监听会话创建/销毁事件,维护全局活跃会话计数。 - 结合用户登录状态,用Redis或内存缓存存储登录用户的会话ID,定期清理超时用户,实现精准的登录用户统计。
内容的提问来源于stack exchange,提问作者Christopher LUKOMBO
相关产品推荐
相关产品推荐

