auto_trade_sys/backend/诊断负载.sh
薇薇安 80872231a5 feat(kline_stream, diagnostics): 增强 K线缓存管理与系统负载诊断功能
在 `kline_stream.py` 中新增缓存清理机制,限制缓存总大小并定期清理过期条目,防止内存无限增长。更新 `backend/诊断负载.sh` 脚本,优化系统负载检查逻辑,提供更详细的进程与日志信息,提升用户对交易服务状态的监控能力。此改动增强了系统的稳定性与性能。
2026-02-19 00:06:23 +08:00

110 lines
3.7 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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"