故障排查指南.md 4.28 KB

故障排除指南

常见问题及解决方案

1. 数据库字段错误

问题:

pymysql.err.OperationalError: (1105, "errCode = 2, detailMessage = Unknown column 'xxx' in 'xxx'")

原因:

数据库表结构与代码中使用的字段名不匹配。

解决方案:

  1. 查看 DATABASE_SETUP.md 了解如何配置字段
  2. 修改对应脚本中的SQL查询,使用实际存在的字段名
  3. 如果是分类字段不存在,这些字段是可选的,代码会自动跳过

已修复的字段:

  • category_level2_idcategory_level3_id 现在是可选的
  • ✅ 基础功能不依赖分类字段

2. 连接超时

问题:

pymysql.err.OperationalError: (2003, "Can't connect to MySQL server...")

解决方案:

  1. 检查数据库配置:config/offline_config.py
  2. 确认网络连接和防火墙设置
  3. 运行测试:python3 test_connection.py

3. 内存不足

问题:

程序运行时内存占用过高或被杀死。

解决方案:

  1. 减少回溯天数:--lookback_days 365(从730改为365)
  2. 减少输出数量:--top_n 20(从50改为20)
  3. 先运行单个算法: bash python3 scripts/i2i_session_w2v.py # 内存占用较小
  4. 跳过Swing算法(内存占用最大): bash python3 run_all.py --skip-i2i

4. 运行时间过长

解决方案:

  1. 减少数据量:--lookback_days 180
  2. 只运行特定算法: bash python3 run_all.py --only-w2v
  3. 考虑使用C++版本的Swing(性能提升10倍)

5. 依赖包安装失败

解决方案:

# 单独安装失败的包
pip3 install pandas sqlalchemy pymysql gensim numpy

# 或使用国内镜像
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

6. Redis连接失败

问题:

redis.exceptions.ConnectionError: Error connecting to Redis

解决方案:

  1. Redis是可选的,只影响索引加载功能
  2. 如果不需要Redis,可以跳过: bash python3 run_all.py # 只运行离线任务,不加载到Redis
  3. 如果需要Redis,确认Redis已安装并运行: bash redis-cli ping # 应该返回 PONG

7. 输出文件为空

可能原因:

  1. 数据量太少(没有满足最小阈值)
  2. 时间范围内没有数据
  3. SQL查询条件过于严格

解决方案:

  1. 检查日志:tail -f logs/run_all_*.log
  2. 调整参数:
    • 增加时间范围:--lookback_days 1000
    • 减少阈值:修改配置文件中的 min_interaction_count
  3. 检查数据库中是否有数据: python # 运行简单查询测试 python3 test_connection.py

8. 权限问题

问题:

PermissionError: [Errno 13] Permission denied

解决方案:

# 给脚本添加执行权限
chmod +x install.sh run_all.py

# 确保有写入权限
chmod 755 output/ logs/

9. Python版本问题

要求:

Python 3.7+

检查版本:

python3 --version

如果版本过低,需要升级Python


10. 编码问题

问题:

UnicodeDecodeError: 'utf-8' codec can't decode byte...

解决方案:

确保所有文件使用UTF-8编码,特别是配置文件和输出文件。


调试技巧

1. 查看详细日志

tail -f logs/run_all_*.log

2. 运行单个任务(便于调试)

python3 scripts/i2i_swing.py --lookback_days 30 --top_n 10

3. 使用较小的数据量测试

python3 run_all.py --lookback_days 30 --top_n 10

4. 检查中间结果

ls -lh output/
head -n 20 output/i2i_swing_*.txt

获取支持

如果以上方法都无法解决问题:

  1. 查看文档

    • README.md - 详细说明
    • DATABASE_SETUP.md - 数据库配置
    • QUICKSTART.md - 快速开始
  2. 查看日志

    • logs/ 目录下的所有日志文件
  3. 简化测试

    • 先运行 test_connection.py
    • 再运行单个脚本
    • 使用小数据量测试
  4. 记录错误信息

    • 完整的错误堆栈
    • 使用的命令
    • 配置文件内容

提示:大部分问题都与数据库字段名不匹配有关,请优先查看 DATABASE_SETUP.md