#!/bin/bash
# 快速诊断系统负载问题

echo "=== 系统负载诊断工具 ==="
echo ""

# 1. 当前负载
echo "📊 当前负载情况："
uptime
echo ""

# 2. CPU 和内存使用
echo "💻 CPU 和内存使用："
top -bn1 | head -5
echo ""

# 3. 查看占用 CPU 最高的进程
echo "🔥 CPU 占用最高的进程（前 10）："
ps aux --sort=-%cpu | head -11 | awk '{printf "%-8s %-6s %-6s %-6s %s\n", $1, $2, $3"%", $4"%", $11}'
echo ""

# 4. 查看 Python 进程（交易服务）
echo "🐍 Python 进程（交易服务）："
PYTHON_PROCS=$(ps aux | grep -E "python.*trading|python.*main|uvicorn" | grep -v grep)
if [ -z "$PYTHON_PROCS" ]; then
    echo "  ⚠️  未发现交易服务进程（服务可能未运行）"
else
    echo "$PYTHON_PROCS" | awk '{printf "PID: %-6s CPU: %-5s MEM: %-5s CMD: %s\n", $2, $3"%", $4"%", $11" "$12" "$13" "$14}'
fi
echo ""

# 5. 检查是否有同步操作在运行
echo "🔄 检查同步操作："
if [ -f "logs/api.log" ]; then
    SYNC_LOGS=$(tail -100 logs/api.log | grep -i "同步\|sync.*binance\|sync_trades" | tail -10)
    if [ -z "$SYNC_LOGS" ]; then
        echo "  未找到同步日志（可能未执行同步操作）"
    else
        echo "最近的同步日志（最后 10 行）："
        echo "$SYNC_LOGS"
    fi
else
    echo "  ⚠️  日志文件不存在（backend 服务可能未运行）"
fi
echo ""

# 6. 检查数据库连接数
echo "🗄️  数据库连接数："
if command -v mysql >/dev/null 2>&1; then
    DB_HOST="${DB_HOST:-localhost}"
    DB_USER="${DB_USER:-root}"
    DB_PASS="${DB_PASS:-}"
    DB_NAME="${DB_NAME:-auto_trade_sys}"
    
    if [ -n "$DB_PASS" ]; then
        mysql -h"$DB_HOST" -u"$DB_USER" -p"$DB_PASS" -e "SHOW PROCESSLIST;" 2>/dev/null | head -20 || echo "  无法连接数据库"
    else
        mysql -h"$DB_HOST" -u"$DB_USER" -e "SHOW PROCESSLIST;" 2>/dev/null | head -20 || echo "  无法连接数据库（需要配置 DB_PASS）"
    fi
else
    echo "  mysql 客户端未安装"
fi
echo ""

# 7. 检查内存使用详情
echo "💾 内存使用详情："
free -h
echo ""

# 8. 检查是否有大量 I/O 等待
echo "📈 I/O 和系统状态（5秒采样）："
vmstat 1 5
echo ""

# 9. 检查交易服务日志中的错误
echo "⚠️  最近的错误日志（最后 5 条）："
if [ -f "logs/api.log" ]; then
    tail -200 logs/api.log | grep -i "error\|exception\|failed\|timeout" | tail -5 || echo "  未找到错误日志"
fi
if [ -f "../trading_system/logs/trading_*.log" ] 2>/dev/null; then
    tail -200 ../trading_system/logs/trading_*.log 2>/dev/null | grep -i "error\|exception\|failed" | tail -5 || echo ""
fi
echo ""

echo "=== 诊断完成 ==="
echo ""
echo "💡 说明："
echo "  - 此脚本可以在交易服务未运行时使用，用于检查系统整体负载"
echo "  - 如果交易服务正在运行，会显示更详细的进程和日志信息"
echo ""
echo "💡 如果负载高，可能原因："
echo "  1. Python 进程（交易服务）占用高："
echo "     - 市场扫描正在运行（计算技术指标）"
echo "     - 订单同步正在运行（从币安拉取大量订单）"
echo "     - 数据库查询慢（检查慢查询日志）"
echo ""
echo "  2. 其他进程占用高："
echo "     - 检查 top/htop 查看具体是哪个进程"
echo "     - 可能是系统更新、备份等后台任务"
echo ""
echo "  3. 内存占用高：检查是否有内存泄漏"
echo ""
echo "  4. I/O 等待高：可能是数据库查询慢或磁盘慢"
echo ""
echo "💡 临时降负载方法："
echo "  - 暂停市场扫描（在配置中设置 SCAN_ENABLED=False）"
echo "  - 等待同步操作完成（不要手动取消）"
echo "  - 重启交易服务（如果进程异常）"
echo "  - 降低扫描并发（设置 SCAN_CONCURRENT_SYMBOLS=1）"
