# VAT队列处理器监控指南

## 问题说明

在 Windows 服务器上长时间运行 PHP 脚本时，可能会遇到以下问题：
- 进程"假死"：进程还在运行但不再处理任务
- 数据库连接超时：长时间无操作导致 MySQL 连接断开
- 内存泄漏：内存使用持续增长
- 无法判断进程状态：缺少心跳日志

## 改进措施

### 1. 心跳机制

队列处理器现在每 60 秒输出一次心跳日志，包含：
- 运行时间
- 已处理任务数
- 内存使用情况
- 进程 PID

示例日志：
```
[2026-01-21 10:30:00] [INFO] 心跳检测 {"uptime_seconds":3600,"processed_count":15,"memory_mb":128.5,"pid":12345}
```

### 2. 数据库连接保活

每 5 分钟自动 ping 数据库连接，如果失败会自动重新连接：
- 防止 MySQL 连接超时（默认 8 小时）
- 自动检测并恢复连接
- 记录连接状态到日志

### 3. 异常自动恢复

当检测到数据库连接问题时，会自动：
- 重新创建数据库连接
- 重新初始化任务管理器和处理器
- 记录详细的错误信息

### 4. 内存监控

当内存使用超过 800MB 时会记录警告日志，帮助发现内存泄漏问题。

## 使用方法

### 方式一：直接运行（推荐用于测试）

```bash
# 交互式模式（显示输出）
php task/queue_processor.php

# 守护进程模式（静默运行）
php task/queue_processor.php --daemon

# 自定义参数
php task/queue_processor.php --interval=60 --max-tasks=3
```

### 方式二：使用 PowerShell 监控脚本（推荐用于生产环境）

PowerShell 监控脚本会自动检测并重启停止的队列处理器：

```powershell
# 基本使用
powershell -ExecutionPolicy Bypass -File scripts\monitor_queue_processor.ps1

# 自定义参数
powershell -ExecutionPolicy Bypass -File scripts\monitor_queue_processor.ps1 -CheckInterval 30 -MaxRestartCount 20
```

监控脚本功能：
- 每 60 秒检查一次进程状态
- 检查心跳日志，发现假死自动重启
- 进程停止时自动重启
- 超过最大重启次数后停止（防止无限重启）
- 记录所有操作到日志文件

### 方式三：使用批处理脚本（简化版）

```cmd
scripts\monitor_queue_processor.bat
```

### 方式四：配置为 Windows 服务（最稳定）

使用 NSSM (Non-Sucking Service Manager) 将监控脚本配置为 Windows 服务：

1. 下载 NSSM: https://nssm.cc/download
2. 安装服务：
```cmd
nssm install VATQueueMonitor "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-ExecutionPolicy Bypass -File C:\path\to\scripts\monitor_queue_processor.ps1"
```
3. 启动服务：
```cmd
nssm start VATQueueMonitor
```

## 日志文件

### 队列处理器日志
- 位置：`logs/queue_processor_YYYY-MM-DD.log`
- 内容：任务处理、心跳、错误信息

### 监控器日志
- 位置：`logs/monitor_YYYYMMDD.log`
- 内容：进程状态检查、重启操作

## 故障排查

### 问题：进程频繁重启

检查 `logs/queue_processor_*.log` 查看错误信息：
- 数据库连接问题：检查数据库配置和网络
- 内存不足：增加 PHP 内存限制
- 代码错误：查看详细的错误堆栈

### 问题：进程假死（有进程但无日志）

可能原因：
- 数据库连接断开：现在会自动恢复
- 死锁：检查数据库锁
- 资源耗尽：检查内存和 CPU 使用

监控脚本会检测超过 5 分钟无心跳的情况并自动重启。

### 问题：监控脚本无法启动进程

检查：
- PHP 是否在系统 PATH 中
- 工作目录是否正确
- 文件权限是否正确

## 性能优化建议

1. **调整检查间隔**：根据任务量调整 `--interval` 参数
2. **调整并发数**：根据服务器性能调整 `--max-tasks` 参数
3. **定期重启**：建议每天凌晨重启一次，清理内存
4. **监控资源**：定期检查内存和 CPU 使用情况

## 配置示例

### 高负载环境
```bash
php task/queue_processor.php --interval=10 --max-tasks=5 --daemon
```

### 低负载环境
```bash
php task/queue_processor.php --interval=60 --max-tasks=1 --daemon
```

### 测试环境
```bash
php task/queue_processor.php --interval=5 --max-tasks=1
```

## 命令行参数

| 参数 | 说明 | 默认值 |
|------|------|--------|
| --interval | 检查间隔（秒） | 8 |
| --max-tasks | 每次最多处理的任务数 | 1 |
| --daemon | 守护进程模式（静默） | 否 |
| --help | 显示帮助信息 | - |

## 监控指标

通过日志可以监控以下指标：
- 运行时间（uptime_seconds）
- 已处理任务数（processed_count）
- 内存使用（memory_mb）
- 进程 PID
- 数据库连接状态
- 错误率

建议定期分析日志，优化系统性能。
