123 lines
4.1 KiB
Bash
123 lines
4.1 KiB
Bash
#!/bin/bash
|
||
|
||
# Go Tunnel 监控脚本
|
||
# 用于实时监控 goroutine 数量和 CPU 占用
|
||
|
||
SERVER_PPROF="http://localhost:6060"
|
||
CLIENT_PPROF="http://localhost:6061"
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m' # No Color
|
||
|
||
echo "========================================"
|
||
echo " Go Tunnel 实时监控"
|
||
echo "========================================"
|
||
echo ""
|
||
echo "监控项:"
|
||
echo " - Goroutine 数量(正常应该 < 15)"
|
||
echo " - CPU 占用率"
|
||
echo " - 进程状态"
|
||
echo ""
|
||
echo "按 Ctrl+C 停止监控"
|
||
echo "========================================"
|
||
echo ""
|
||
|
||
printf "%-12s | %-20s | %-20s | %-10s\n" "时间" "服务器" "客户端" "CPU占用"
|
||
printf "%-12s | %-20s | %-20s | %-10s\n" "--------" "--------------------" "--------------------" "----------"
|
||
|
||
while true; do
|
||
TIMESTAMP=$(date +%H:%M:%S)
|
||
|
||
# 获取服务器 goroutine 数量
|
||
SERVER_GOROUTINES=$(curl -s --connect-timeout 1 $SERVER_PPROF/debug/pprof/goroutine 2>/dev/null | \
|
||
grep -oP 'goroutine profile: total \K\d+' || echo "N/A")
|
||
|
||
# 获取客户端 goroutine 数量
|
||
CLIENT_GOROUTINES=$(curl -s --connect-timeout 1 $CLIENT_PPROF/debug/pprof/goroutine 2>/dev/null | \
|
||
grep -oP 'goroutine profile: total \K\d+' || echo "N/A")
|
||
|
||
# 获取服务器进程 CPU 占用
|
||
SERVER_PID=$(pgrep -f "bin/server" | head -1)
|
||
if [ ! -z "$SERVER_PID" ]; then
|
||
SERVER_CPU=$(ps -p $SERVER_PID -o %cpu= | tr -d ' ')
|
||
else
|
||
SERVER_CPU="未运行"
|
||
fi
|
||
|
||
# 获取客户端进程 CPU 占用
|
||
CLIENT_PID=$(pgrep -f "bin/client" | head -1)
|
||
if [ ! -z "$CLIENT_PID" ]; then
|
||
CLIENT_CPU=$(ps -p $CLIENT_PID -o %cpu= | tr -d ' ')
|
||
else
|
||
CLIENT_CPU="未运行"
|
||
fi
|
||
|
||
# 格式化 goroutine 信息
|
||
if [ "$SERVER_GOROUTINES" != "N/A" ]; then
|
||
SERVER_INFO="Goroutines: $SERVER_GOROUTINES"
|
||
# 如果 goroutine 数量异常,高亮显示
|
||
if [ "$SERVER_GOROUTINES" -gt 20 ]; then
|
||
SERVER_INFO="${RED}Goroutines: $SERVER_GOROUTINES ⚠${NC}"
|
||
elif [ "$SERVER_GOROUTINES" -gt 15 ]; then
|
||
SERVER_INFO="${YELLOW}Goroutines: $SERVER_GOROUTINES ⚠${NC}"
|
||
else
|
||
SERVER_INFO="${GREEN}Goroutines: $SERVER_GOROUTINES ✓${NC}"
|
||
fi
|
||
else
|
||
SERVER_INFO="${RED}离线${NC}"
|
||
fi
|
||
|
||
if [ "$CLIENT_GOROUTINES" != "N/A" ]; then
|
||
CLIENT_INFO="Goroutines: $CLIENT_GOROUTINES"
|
||
if [ "$CLIENT_GOROUTINES" -gt 20 ]; then
|
||
CLIENT_INFO="${RED}Goroutines: $CLIENT_GOROUTINES ⚠${NC}"
|
||
elif [ "$CLIENT_GOROUTINES" -gt 15 ]; then
|
||
CLIENT_INFO="${YELLOW}Goroutines: $CLIENT_GOROUTINES ⚠${NC}"
|
||
else
|
||
CLIENT_INFO="${GREEN}Goroutines: $CLIENT_GOROUTINES ✓${NC}"
|
||
fi
|
||
else
|
||
CLIENT_INFO="${RED}离线${NC}"
|
||
fi
|
||
|
||
# CPU 信息
|
||
if [ "$SERVER_CPU" != "未运行" ]; then
|
||
CPU_INFO="S:${SERVER_CPU}%"
|
||
# 检查 CPU 占用是否过高
|
||
CPU_VALUE=$(echo $SERVER_CPU | cut -d. -f1)
|
||
if [ "$CPU_VALUE" -gt 50 ] 2>/dev/null; then
|
||
CPU_INFO="${RED}S:${SERVER_CPU}% ⚠${NC}"
|
||
elif [ "$CPU_VALUE" -gt 10 ] 2>/dev/null; then
|
||
CPU_INFO="${YELLOW}S:${SERVER_CPU}%${NC}"
|
||
else
|
||
CPU_INFO="${GREEN}S:${SERVER_CPU}%${NC}"
|
||
fi
|
||
else
|
||
CPU_INFO="${RED}未运行${NC}"
|
||
fi
|
||
|
||
if [ "$CLIENT_CPU" != "未运行" ]; then
|
||
if [ "$SERVER_CPU" != "未运行" ]; then
|
||
CPU_INFO="${CPU_INFO} "
|
||
else
|
||
CPU_INFO=""
|
||
fi
|
||
CLIENT_CPU_VALUE=$(echo $CLIENT_CPU | cut -d. -f1)
|
||
if [ "$CLIENT_CPU_VALUE" -gt 50 ] 2>/dev/null; then
|
||
CPU_INFO="${CPU_INFO}${RED}C:${CLIENT_CPU}% ⚠${NC}"
|
||
elif [ "$CLIENT_CPU_VALUE" -gt 10 ] 2>/dev/null; then
|
||
CPU_INFO="${CPU_INFO}${YELLOW}C:${CLIENT_CPU}%${NC}"
|
||
else
|
||
CPU_INFO="${CPU_INFO}${GREEN}C:${CLIENT_CPU}%${NC}"
|
||
fi
|
||
fi
|
||
|
||
# 输出监控信息
|
||
printf "%-12s | %-35s | %-35s | %-30s\n" "$TIMESTAMP" "$SERVER_INFO" "$CLIENT_INFO" "$CPU_INFO"
|
||
|
||
sleep 2
|
||
done
|