Linux-常用监控工具
以下是对 Linux 系统中常用监控工具(netstat
、ss
、dmesg
)的系统性介绍,涵盖其核心功能、典型用法及实际应用场景,帮助您分析系统状态和内核参数调整后的效果:
1. netstat -s
:网络协议栈统计监控
功能
netstat
用于显示网络连接、路由表、接口统计等信息,-s
参数专注于网络协议栈的详细统计(包括 TCP、UDP、ICMP 等)。
适用场景:
- 分析 TCP 连接错误、重传、丢包等网络问题。
- 验证
sysctl
网络参数调整后的效果(如tcp_tw_reuse
、tcp_syncookies
)。
关键输出解析
$ netstat -s
# TCP 统计部分
Tcp:12345 active connections openings # 主动建立的连接数6789 passive connection openings # 被动接受的连接数100 failed connection attempts # 失败连接尝试(如 SYN 重试超限)500 segments retransmitted # 数据包重传次数(高值可能预示网络不稳定)200 invalid SYN cookies received # 无效 SYN Cookie(可能遭受 SYN Flood 攻击)300 resets sent # RST 包发送次数(异常关闭连接)# UDP 统计部分
Udp:50 packets received # 接收的 UDP 包总数10 packet receive errors # 接收错误(如缓冲区溢出)
常用参数
-s
:显示所有协议统计。-t
:仅显示 TCP 统计。-u
:仅显示 UDP 统计。-c
:持续刷新输出(实时监控)。
实际应用
- 检测网络丢包:
netstat -s | grep -E "segments retransmitted|packet receive errors"
- 分析连接失败:
netstat -s | grep "failed connection attempts"
2. ss -s
:套接字状态统计与监控
功能
ss
(Socket Statistics)是 netstat
的现代替代工具,性能更高,支持更详细的套接字信息。ss -s
显示套接字状态的汇总统计。
适用场景:
- 快速查看系统当前连接数、不同状态(如
ESTABLISHED
、TIME-WAIT
)的分布。 - 监控高并发场景下的连接队列溢出(结合
net.core.somaxconn
调优)。
关键输出解析
$ ss -s
Total: 456
TCP: 320 (estab 200, closed 80, orphaned 0, timewait 40)
UDP: 10
RAW: 1
FRAG: 0 # 连接状态详解:
# - estab:已建立的连接数
# - timewait:TIME-WAIT 状态连接数(过多可能需调整 tcp_max_tw_buckets)
# - orphaned:无主连接(可能应用未正确关闭)
常用参数
-s
:显示汇总统计。-t
:仅显示 TCP 套接字。-u
:仅显示 UDP 套接字。-n
:禁用域名解析(加快输出)。-o
:显示计时器信息(如连接超时)。
实际应用
- 查看 TIME-WAIT 连接数:
ss -s | grep "timewait"
- 监控连接队列溢出:
ss -tnlp | grep "LISTEN" # 查看监听队列的 Recv-Q(当前积压数)和 Send-Q(最大容量)
3. dmesg
:内核日志与硬件事件监控
功能
dmesg
显示内核环形缓冲区中的日志,记录硬件事件、驱动状态、内核错误等信息。
适用场景:
- 检测内核参数调整后的错误或警告(如内存分配失败、网络丢包)。
- 排查硬件故障或驱动兼容性问题。
关键输出解析
$ dmesg
[ 1234.567] IPv4: martian source 192.168.1.100 from 10.0.0.1 # 异常源 IP(路由问题)
[ 2345.678] TCP: time wait bucket table overflow # TIME-WAIT 连接超过限制
[ 3456.789] Out of memory: Kill process 1234 (java) # 内存耗尽触发 OOM Killer
[ 4567.890] eth0: link up # 网卡链路状态变化
常用参数
-T
:显示人类可读的时间戳。-k
:仅显示内核消息。-l
:按日志级别过滤(如-l err
仅显示错误)。-H
:隐藏时间戳和主机信息。
实际应用
- 实时监控内核事件:
dmesg -w # 持续输出新日志(类似 tail -f)
- 筛选网络相关错误:
dmesg | grep -iE "tcp|udp|ipv4|eth0"
- 查看 OOM 事件:
dmesg | grep "Out of memory"
4. 工具对比与联合使用
工具 | 核心功能 | 优势 | 典型场景 |
---|---|---|---|
netstat -s | 协议栈统计(TCP/UDP/ICMP) | 历史兼容性强,输出直观 | 分析网络错误、重传统计 |
ss -s | 套接字状态与连接统计 | 性能高效,支持更多细节 | 实时监控连接数、队列积压 |
dmesg | 内核日志与硬件事件 | 直接反映内核级问题 | 排查内核参数错误、硬件故障 |
联合使用案例
场景:调整 net.ipv4.tcp_max_syn_backlog
后验证 SYN 队列溢出情况。
- 查看当前 SYN 队列积压:
ss -tnl | grep ":80" # 查看 Recv-Q(当前积压数)与 Send-Q(队列容量)
- 监控 SYN 重传统计:
netstat -s | grep "SYNs to LISTEN"
- 检查内核日志中的队列溢出警告:
dmesg | grep "TCP: Possible SYN flooding"
5. 自动化监控与扩展工具
- 脚本化监控:
# 定期记录 TCP 统计到文件 while true; donetstat -s | grep "segments retransmitted" >> /var/log/tcp_retrans.logsleep 60 done
- 高级工具扩展:
sar
(sysstat 包):长期性能数据收集(如网络吞吐、CPU 使用率)。nmon
:实时系统资源监控(支持网络、磁盘、CPU 等)。Prometheus + Grafana
:可视化监控与告警。
总结
通过 netstat -s
、ss -s
和 dmesg
的组合使用,可以全面监控网络状态、套接字行为及内核事件,尤其在调整 sysctl
参数后:
netstat -s
用于分析协议层错误(如重传、丢包)。ss -s
快速定位连接状态异常(如 TIME-WAIT 堆积)。dmesg
捕获内核级警告(如内存不足、队列溢出)。
结合这些工具,可精准评估调优效果并快速排查问题。