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捕获内核级警告(如内存不足、队列溢出)。
 结合这些工具,可精准评估调优效果并快速排查问题。
