sar可通过-n sock选项回溯历史socket快照,但需sysstat启用网络采集(sadc_options含-s net)、日志存在且未缺失字段;关键指标包括sock(瞬时总数)、active/s与passive/s(连接建立速率),需结合dev等指标交叉分析趋势性压力。

要分析历史系统中套接字(socket)的分配状态,sar 本身不直接记录套接字的“分配过程”或“连接生命周期”,但它能通过 -n SOCK 选项回溯统计已采集的 socket 使用快照——前提是 sysstat 服务当时开启了网络数据采集且日志已保存。
确认历史 socket 数据是否可用
sysstat 默认每 10 分钟执行一次 sa1,但 socket 统计(SOCK)并非 always-on。需检查:
- /etc/sysconfig/sysstat(RHEL/CentOS)或 /etc/default/sysstat(Debian/Ubuntu)中是否启用网络采集:确保
SADC_OPTIONS包含-S NET或未显式禁用;旧版本若无配置,默认可能只采基础项(CPU、内存、IO),SOCK 需显式开启 - 运行
ls -l /var/log/sa/sa$(date -d 'yesterday' +%d)确认昨日日志存在;再用sar -n SOCK -f /var/log/sa/saXX | head -5测试能否输出(XX 为日期,如 29 表示 7 月 29 日) - 若提示 “No data” 或字段缺失(如仅显示时间无数值),说明当日未采集 SOCK 指标,无法回溯
提取和解读 socket 历史统计
执行 sar -n SOCK -f /var/log/sa/sa29(以今日为例)可得到如下关键字段:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- sock:当前已分配的 socket 总数(含 TCP、UDP、RAW 等)
- active/s:每秒新创建的主动连接数(客户端发起的 connect)
- passive/s:每秒新接受的被动连接数(服务器 accept)
- proto:协议类型(部分版本会分列 tcp、udp、raw 等,取决于内核和 sysstat 版本)
注意:active/s 和 passive/s 是速率值,反映连接建立频度;sock 是瞬时快照,代表某一采样时刻的活跃 socket 总量。持续增长且不回落,可能暗示连接泄漏或未正确 close。
定位异常时段与关联分析
单独看 SOCK 不足以判断问题根源,需结合其他指标交叉验证:
- 若
sock高 +passive/s持续飙升 → 检查应用是否遭遇突发请求或 SYN Flood - 若
sock高 +active/s低 +%idle也高 → 可能大量连接处于 ESTABLISHED 但空闲(如长连接未复用或超时设置过长) - 搭配
sar -n DEV -f /var/log/sa/sa29查对应时段网卡收发包量,确认是否真实流量驱动,还是异常重传/丢包导致连接堆积
补充说明
sar 的 SOCK 统计是内核提供的聚合计数器,不包含具体 socket 的 PID、端口或远程地址。如需进程级连接详情(如哪个进程占用了大量 fd),必须依赖实时工具(ss -s、lsof -i)或启用更细粒度审计(如 eBPF)。历史 socket 分析的价值在于发现趋势性压力,而非追踪单个连接。










