Files
ewoooc/docs/CRAWLER_OPTIMIZATION_ANALYSIS.md
ogt 1b4f3a7bbe
Some checks failed
CD Pipeline / deploy (push) Failing after 59s
feat: EwoooC 初始化 — 完整專案推版至 Gitea
- 建立 Gitea Actions CD pipeline (.gitea/workflows/cd.yaml)
- 部署模式: rsync Python 檔案至 188 → docker restart (volume mount)
- Dockerfile/requirements 變動時自動重建 Docker image
- 部署通知: Telegram (開始/成功/失敗)
- 健康檢查: https://mo.wooo.work/health (最多 5 次重試)
- 同步最新 CLAUDE.md / ADR-008 / memory (2026-04-19)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 01:21:13 +08:00

203 lines
5.3 KiB
Markdown
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.
# 爬蟲資源消耗分析與優化方案
**分析日期**2026-01-14
**問題**:爬蟲消耗過高 CPU 資源(單個 Chrome 程序可達 50%+ CPU
---
## 🔍 問題分析
### 當前配置scheduler.py
```python
# Chrome Options 配置
options.add_argument('--headless=new')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--force-device-scale-factor=3') # ⚠️ 3倍解析度
options.add_argument('--lang=zh-TW')
options.add_argument('--high-dpi-support=1')
```
### 資源消耗分析
| 配置項目 | 作用 | CPU 影響 | 記憶體影響 |
|---------|------|---------|-----------|
| `--headless=new` | 無頭模式 | 低 | 低 |
| `--disable-gpu` | 禁用GPU | 中CPU渲染 | 低 |
| `--no-sandbox` | 禁用沙盒 | 低 | 低 |
| **`--force-device-scale-factor=3`** | **3倍解析度** | **極高** | **高** |
| `--high-dpi-support=1` | 高DPI支援 | 中 | 中 |
### 關鍵問題
1. **3倍解析度`scale-factor=3`**
- 渲染面積增加 9 倍3×3
- Chrome 需要渲染 `5760×15000` 像素(原本 `1920×5000`
- 單個頁面渲染可消耗 50%+ CPU
2. **無GPU加速`--disable-gpu`**
- 所有渲染由 CPU 執行
- 配合 3 倍解析度CPU 負擔極重
3. **缺少資源限制**
- 無並發限制
- 無單進程模式
- 無記憶體限制
---
## 🎯 優化方案
### 方案 A最小化資源消耗推薦
**適用場景**:不需要高清截圖,只需要抓取商品資料
**修改項目**
```python
# 1. 降低解析度倍數3 → 1
options.add_argument('--force-device-scale-factor=1') # 從 3 改為 1
# 2. 使用單進程模式(減少 Chrome 子程序)
options.add_argument('--single-process')
# 3. 禁用軟體光柵化器
options.add_argument('--disable-software-rasterizer')
# 4. 限制記憶體使用
options.add_argument('--max-old-space-size=512')
```
**預期效果**
- CPU 使用:**降低 70-80%**50% → 10%
- 記憶體使用:**降低 60%**500MB → 200MB
- 頁面載入速度:**提升 50%**
---
### 方案 B平衡效能需要截圖但降低負擔
**適用場景**:需要截圖功能,但可以接受較低解析度
**修改項目**
```python
# 1. 降低解析度倍數3 → 1.5
options.add_argument('--force-device-scale-factor=1.5') # 從 3 改為 1.5
# 2. 啟用 GPU 加速(讓 GPU 分擔渲染)
# options.add_argument('--disable-gpu') # 註解掉此行
options.add_argument('--enable-gpu-rasterization')
# 3. 使用單進程模式
options.add_argument('--single-process')
```
**預期效果**
- CPU 使用:**降低 50-60%**50% → 20%
- 記憶體使用:**降低 40%**500MB → 300MB
- 截圖品質仍然清晰1.5倍解析度足夠)
---
### 方案 C降低執行頻率
**當前配置**:每小時執行 3 個爬蟲商品看板、EDM、購物節
**優化建議**
```python
# run_scheduler.py 修改執行頻率
schedule.every(4).hours.do(run_momo_task) # 每 1 小時 → 每 4 小時
schedule.every(4).hours.do(run_edm_task) # 每 1 小時 → 每 4 小時
schedule.every(6).hours.do(run_festival_task) # 每 1 小時 → 每 6 小時
```
**預期效果**
- 平均 CPU 使用:**降低 75%**
- 爬蟲執行次數:從 24次/天 → 6次/天
---
### 方案 D使用輕量級替代方案
**完全移除 Selenium**,改用:
- `requests` + `BeautifulSoup`(如果網站允許)
- `httpx` + `parsel`(更快的 HTTP 客戶端)
- `playwright`(比 Selenium 更輕量)
**優缺點**
- ✅ CPU 使用降低 90%+
- ❌ 需要重寫爬蟲代碼
- ❌ 可能無法處理 JavaScript 渲染的網站
---
## 📊 建議實施順序
### 第一階段:立即優化(方案 A + 方案 C
1. **修改 scheduler.py**
- 降低解析度:`scale-factor=3``scale-factor=1`
- 增加 `--single-process`
- 增加 `--disable-software-rasterizer`
2. **降低執行頻率**
- 商品看板:每 4 小時
- EDM爬蟲每 4 小時
- 購物節:每 6 小時
**預期結果**
- 資源消耗降低 **80-85%**
- 仍能維持基本監控需求
---
### 第二階段評估效果1-2 天後)
1. 檢查 Grafana 監控數據
2. 確認爬蟲是否正常運作
3. 評估是否需要進一步優化
---
### 第三階段:長期優化(可選)
1. 考慮改用 Playwright輕量級
2. 實施任務隊列Celery
3. 分離爬蟲到獨立 VM如需高頻率爬蟲
---
## ⚠️ 重要提醒
### 截圖功能影響
如果您的通知系統需要高清截圖(`force-device-scale-factor=3`),請選擇方案 B1.5倍解析度)。
如果不需要高清截圖,建議選擇方案 A1倍解析度可大幅降低資源消耗。
### Systemd 服務
目前 `momo-scheduler.service` 已停用。如果需要重新啟動:
```bash
sudo systemctl start momo-scheduler # 啟動
sudo systemctl enable momo-scheduler # 設為開機自啟動
```
建議:優化完成後再啟動服務。
---
## 🔧 實施腳本
我已準備好優化後的代碼,請確認要使用哪個方案:
- **方案 A**(推薦):最大化降低資源消耗
- **方案 B**:平衡效能與截圖品質
- **方案 C**:僅降低執行頻率
---
**文件版本**1.0
**最後更新**2026-01-14
**維護人員**MOMO Pro System Admin