如何基于端口监控FreeSWITCH的Recv-Q?
如何基于端口监控FreeSWITCH的Recv-Q?
# 连接FS服务器,执行recvq接收队列监控脚本
while true; do/bin/bash -x recvq_monitor.sh
done# 复制新开上一个连接FS服务器的窗口,执行模拟阻塞脚本,大批量发送数据给FS服务器的指定端口,执行后回到上一窗口观察输出
/bin/bash -x simulate_recvq.sh
recvq_monitor.sh
#!/bin/bash# 此脚本为 recvq_monitor.sh
# 定义需要监控的端口数组
MONITOR_PORTS=(8021 3306)# 获取当前时间戳
timestamp=$(date +"%F %T")echo "[$timestamp] 开始端口Recv-Q监控..."# 遍历数组
for port in "${MONITOR_PORTS[@]}"; do# 使用ss获取监听端口的连接信息ss -tnp | grep ":$port " | while read -r line; do# 提取Recv-Q, PID, 状态等字段recv_q=$(echo "$line" | awk '{print $2}')pid_info=$(echo "$line" | awk -F 'pid=' '{print $2}' | cut -d',' -f1)# 提取本地端口local_port=$(echo "$line" | awk '{print $4}' | awk -F':' '{print $NF}')# 判断Recv-Q是否大于0if [ "$recv_q" -gt 0 ]; thenecho "[异常] PID: $pid_info, 端口: $local_port, Recv-Q: $recv_q"fidone
done
simulate_recvq.sh
#!/bin/bash# 此脚本为 simulate_recvq.sh
# 目标 IP 和端口
HOST=127.0.0.1
PORT=8021# 无限while循环写入数据,模拟堆积
(echo "AUTH ClueCon"sleep 1while true; do# 发送随机垃圾数据,每次1000KBhead -c 1024000 /dev/urandom | base64sleep 0.05done
) | nc $HOST $PORT
# nc发送tcp长连接