以下是對 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
捕獲內核級警告(如內存不足、隊列溢出)。
結合這些工具,可精準評估調優效果并快速排查問題。