Blame view

offline_tasks/doc/TROUBLESHOOTING.md 4.28 KB
5ab1c29c   tangwang   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
  # 故障排除指南
  
  ## 常见问题及解决方案
  
  ### 1. 数据库字段错误
  
  #### 问题:
  ```
  pymysql.err.OperationalError: (1105, "errCode = 2, detailMessage = Unknown column 'xxx' in 'xxx'")
  ```
  
  #### 原因:
  数据库表结构与代码中使用的字段名不匹配。
  
  #### 解决方案:
  1. 查看 `DATABASE_SETUP.md` 了解如何配置字段
  2. 修改对应脚本中的SQL查询,使用实际存在的字段名
  3. 如果是分类字段不存在,这些字段是可选的,代码会自动跳过
  
  #### 已修复的字段:
  -`category_level2_id` 和 `category_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. 依赖包安装失败
  
  #### 解决方案:
  ```bash
  # 单独安装失败的包
  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
  ```
  
  #### 解决方案:
  ```bash
  # 给脚本添加执行权限
  chmod +x install.sh run_all.py
  
  # 确保有写入权限
  chmod 755 output/ logs/
  ```
  
  ---
  
  ### 9. Python版本问题
  
  #### 要求:
  Python 3.7+
  
  #### 检查版本:
  ```bash
  python3 --version
  ```
  
  #### 如果版本过低,需要升级Python
  
  ---
  
  ### 10. 编码问题
  
  #### 问题:
  ```
  UnicodeDecodeError: 'utf-8' codec can't decode byte...
  ```
  
  #### 解决方案:
  确保所有文件使用UTF-8编码,特别是配置文件和输出文件。
  
  ---
  
  ## 调试技巧
  
  ### 1. 查看详细日志
  ```bash
  tail -f logs/run_all_*.log
  ```
  
  ### 2. 运行单个任务(便于调试)
  ```bash
  python3 scripts/i2i_swing.py --lookback_days 30 --top_n 10
  ```
  
  ### 3. 使用较小的数据量测试
  ```bash
  python3 run_all.py --lookback_days 30 --top_n 10
  ```
  
  ### 4. 检查中间结果
  ```bash
  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`