三个层级要分清
一个用户登录共享就建立一个会话;会话下面可以有多条连接(SMB3 的多通道会开多条);每条连接上又有若干被打开的文件句柄。系统对三者的限制、统计与释放方式都不一样:会话受账号与授权约束,连接受协议与网络能力约束,句柄受应用是否及时关闭文件约束。日常说的「连接数满」多数其实是句柄泄漏。
基本信息
| 适用平台 | Windows Server 文件服务;Samba 对应 smbstatus |
|---|---|
| 会话查看 | Get-SmbSession |
| 连接查看 | Get-SmbConnection |
| 句柄查看 | Get-SmbOpenFile |
| Linux 侧 | smbstatus -b(会话)与 -L(锁) |
三层对象对照
| 对象 | 含义 | 何时重点关注 |
|---|---|---|
| 会话 Session | 一次登录认证的结果 | 账号并发受限、需要强制下线某人 |
| 连接 Connection | 会话上的网络通道 | 多通道、网络路径、加密与签名状态 |
| 打开文件 Open | 被占用的文件句柄 | 文件删不掉、改不了名、共享盘卡顿 |
| 授权/许可 | 对并发访问的合规约束 | 多用户服务器与虚拟桌面环境的合规检查 |
查看与清理
查看与清理
# Windows:列出所有会话与来源主机
Get-SmbSession | Select-Object ClientComputerName,ClientUserName,NumOpens
# Windows:找出被占用的文件与持有者
Get-SmbOpenFile | Select-Object ClientUserName,Path,ClientComputerName
# Windows:断开指定会话(会中断该客户端的访问,操作前先确认)
Close-SmbSession -ClientComputerName 10.0.0.31 -Force
# Linux 侧查看会话与锁
smbstatus -bSMB3 为什么改变了「连接数」的算法
早期 SMB 与不少老网络存储按「每用户连接数」做限制,多开几个资源管理器窗口就可能触发上限。SMB3 起,同一用户后续的连接可以复用已有会话,不再逐条计入授权,于是「打开太多连接」这类报错在新系统组合里明显减少;反过来,在混合了老存储的环境中,同样的使用习惯仍会撞上老设备的硬限制。
典型使用场景
- 终端服务器或多用户虚拟桌面:大量用户同时访问同一共享盘的会话与句柄规划
- 文件被占用导致无法重命名或删除:定位是哪个用户与哪台主机持有句柄
- 需要强制下线某个异常客户端:按来源主机断开其会话
- 排查共享盘响应变慢:先看句柄数量是否异常增长
句柄数量持续增长而无人操作,通常指向应用只打开不关闭:常见于自制脚本、批量处理程序或索引工具。这类泄漏在会话数上完全看不出来,只能靠句柄视图发现。