監控Ubuntu Backlog變化的方法
網絡backlog(新連接隊列)的監控是核心需求,可通過以下命令實時查看:
ss -tnl
:顯示所有處于監聽狀態的TCP套接字,輸出中包含Recv-Q
(當前接收隊列長度,即backlog使用量)和Send-Q
(當前發送隊列長度,通常為0或很?。?。例如:ss -tnl | grep 'LISTEN'
輸出示例:tcp LISTEN 0 128 *:80 *:*
,其中128
是該端口的backlog大?。?code>Send-Q的上限)。netstat -s
:顯示TCP協議的狀態統計信息,包括listen queue
的溢出次數(listen queue overflows
),可間接反映backlog是否充足:netstat -s | grep 'listen queue'
系統的最大backlog值由/proc/sys/net/core/somaxconn
文件定義,該值限制了單個監聽端口能排隊的最大連接請求數:
cat /proc/sys/net/core/somaxconn
若需臨時修改(重啟后失效),可使用:
sudo sysctl -w net.core.somaxconn=2048
永久修改需編輯/etc/sysctl.conf
文件,添加:
net.core.somaxconn=2048
使用watch
命令定期刷新ss
或netstat
的輸出,直觀觀察backlog的變化趨勢:
watch -n 1 "ss -tnl | grep 'LISTEN' | awk '{print \$1,\$5}'"
-n 1
:每1秒刷新一次;awk '{print \$1,\$5}'
:提取協議類型(如tcp
)和監聽地址及端口(如*:80
),簡化輸出。通過腳本定期檢查backlog大小,并將結果保存到日志文件,便于后續分析:
#!/bin/bash
LOG_FILE="/var/log/backlog_monitor.log"
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
BACKLOG_INFO=$(ss -tnl | grep 'LISTEN' | awk '{print $1,$5,$6}')
echo "[$TIMESTAMP] Backlog Info:" >> $LOG_FILE
echo "$BACKLOG_INFO" >> $LOG_FILE
賦予腳本執行權限并設置定時任務(如每5分鐘運行一次):
chmod +x /path/to/backlog_monitor.sh
(crontab -l ; echo "*/5 * * * * /path/to/backlog_monitor.sh") | crontab -
對于需要長期、自動化監控的場景,可使用專業工具:
node_exporter
采集系統指標(包括網絡backlog),配置Prometheus的告警規則(如backlog_queue_length > 1000
),并由Alertmanager發送郵件、短信等告警。sudo apt install glances
glances
系統日志可能記錄backlog溢出或相關錯誤,可通過以下命令查看:
journalctl -xe | grep -i 'backlog\|overflow'
或查看傳統日志文件:
grep -i 'backlog' /var/log/syslog
通過上述方法,可全面監控Ubuntu系統中backlog的變化情況,及時發現并解決隊列溢出等問題,保障系統性能和穩定性。