Files
aitsc/docs/port_management_guide.md

307 lines
6.4 KiB
Markdown
Raw Normal View History

# 端口管理指南
## 📋 **概述**
本指南介绍如何管理Flask应用的端口占用问题确保服务稳定运行。
## 🛠️ **工具介绍**
### 1. 端口管理脚本 (`scripts/port_manager.sh`)
**功能:**
- 检查端口占用情况
- 清理端口占用
- 启动/停止/重启应用
- 查看应用状态
- 监控模式
**使用方法:**
```bash
# 检查端口占用
./scripts/port_manager.sh check
# 清理端口占用
./scripts/port_manager.sh clean
# 启动应用
./scripts/port_manager.sh start
# 停止应用
./scripts/port_manager.sh stop
# 重启应用
./scripts/port_manager.sh restart
# 查看状态
./scripts/port_manager.sh status
# 启动监控
./scripts/port_manager.sh monitor
# 显示帮助
./scripts/port_manager.sh help
```
### 2. 端口监控脚本 (`scripts/port_monitor.py`)
**功能:**
- 实时监控端口状态
- 自动检测服务异常
- 自动重启服务
- 生成监控报告
- 系统资源监控
**使用方法:**
```bash
# 查看当前状态
python scripts/port_monitor.py status
# 生成详细报告
python scripts/port_monitor.py report
# 重启服务
python scripts/port_monitor.py restart
# 启动监控模式
python scripts/port_monitor.py monitor
# 查看配置
python scripts/port_monitor.py config
```
### 3. Systemd服务配置 (`scripts/flask-app.service`)
**功能:**
- 系统级服务管理
- 自动启动/停止
- 故障自动重启
- 日志管理
## 🔧 **配置说明**
### 端口管理脚本配置
脚本中的主要配置项:
```bash
PORT=5002 # 应用端口
APP_NAME="flask_prompt_master" # 应用名称
PID_FILE="logs/gunicorn.pid" # PID文件路径
LOG_DIR="logs" # 日志目录
```
### 监控脚本配置
配置文件:`logs/monitor_config.json`
```json
{
"check_interval": 30, // 检查间隔(秒)
"max_restart_attempts": 3, // 最大重启尝试次数
"alert_threshold": 2, // 告警阈值
"port_timeout": 5, // 端口检查超时时间
"enable_alerts": true, // 启用告警
"auto_restart": true // 自动重启
}
```
## 🚀 **部署步骤**
### 1. 安装systemd服务可选
```bash
# 复制服务文件
sudo cp scripts/flask-app.service /etc/systemd/system/
# 重新加载systemd
sudo systemctl daemon-reload
# 启用服务
sudo systemctl enable flask-app
# 启动服务
sudo systemctl start flask-app
# 查看状态
sudo systemctl status flask-app
```
### 2. 设置定时任务
```bash
# 编辑crontab
crontab -e
# 添加定时检查任务每5分钟检查一次
*/5 * * * * /home/renjianbo/aitsc/scripts/port_manager.sh status > /dev/null 2>&1
```
### 3. 配置日志轮转
创建日志轮转配置:`/etc/logrotate.d/flask-app`
```
/home/renjianbo/aitsc/logs/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 644 renjianbo renjianbo
postrotate
systemctl reload flask-app > /dev/null 2>&1 || true
endscript
}
```
## 📊 **监控和告警**
### 1. 监控指标
- **端口占用状态**检查5002端口是否被正确占用
- **Gunicorn进程状态**:检查主进程和工作进程
- **服务响应状态**检查HTTP服务是否正常响应
- **系统资源**CPU、内存、磁盘使用率
### 2. 告警机制
- **自动告警**:检测到异常时自动记录告警日志
- **自动重启**:服务异常时自动尝试重启
- **重启限制**:防止频繁重启,设置重启间隔和次数限制
### 3. 日志文件
- `logs/port_monitor.log`:监控脚本日志
- `logs/port_alerts.log`:告警日志
- `logs/gunicorn_error.log`Gunicorn错误日志
- `logs/gunicorn_access.log`Gunicorn访问日志
## 🔍 **故障排查**
### 1. 端口被占用
**症状:** 启动时提示 "Address already in use"
**解决方案:**
```bash
# 检查端口占用
./scripts/port_manager.sh check
# 清理端口占用
./scripts/port_manager.sh clean
# 重新启动
./scripts/port_manager.sh start
```
### 2. 服务无响应
**症状:** 访问网站显示连接被拒绝
**解决方案:**
```bash
# 检查服务状态
./scripts/port_manager.sh status
# 重启服务
./scripts/port_manager.sh restart
# 查看错误日志
tail -f logs/gunicorn_error.log
```
### 3. 进程异常退出
**症状:** PID文件存在但进程不存在
**解决方案:**
```bash
# 清理所有相关进程
pkill -f gunicorn
# 重新启动
./scripts/port_manager.sh start
```
## 📈 **性能优化**
### 1. 监控配置优化
根据服务器性能调整监控参数:
```json
{
"check_interval": 60, // 降低检查频率
"port_timeout": 3, // 减少超时时间
"max_restart_attempts": 5 // 增加重启尝试次数
}
```
### 2. 日志管理
定期清理日志文件:
```bash
# 清理30天前的日志
find logs/ -name "*.log" -mtime +30 -delete
# 压缩旧日志
find logs/ -name "*.log" -mtime +7 -exec gzip {} \;
```
### 3. 系统资源监控
设置资源告警阈值:
- CPU使用率 > 80%
- 内存使用率 > 90%
- 磁盘使用率 > 85%
## 🔒 **安全考虑**
### 1. 权限管理
确保脚本和日志文件权限正确:
```bash
# 设置脚本权限
chmod +x scripts/port_manager.sh
chmod +x scripts/port_monitor.py
# 设置日志目录权限
chmod 755 logs/
chmod 644 logs/*.log
```
### 2. 网络安全
- 限制端口访问只允许必要的IP访问5002端口
- 防火墙配置配置iptables规则
- SSL/TLS使用HTTPS协议
### 3. 监控安全
- 监控脚本权限:只允许特定用户运行
- 日志安全:定期备份和加密敏感日志
- 告警安全:避免在告警中暴露敏感信息
## 📞 **技术支持**
### 1. 常见问题
**Q: 为什么端口会被其他进程占用?**
A: 可能是之前的Gunicorn进程未完全清理或者有其他应用使用了相同端口。
**Q: 如何防止服务意外停止?**
A: 使用systemd服务配置自动重启或启用监控脚本的自动重启功能。
**Q: 监控脚本消耗太多资源怎么办?**
A: 调整检查间隔,或使用更轻量级的监控方式。
### 2. 联系支持
- 查看日志文件获取详细错误信息
- 使用状态检查命令诊断问题
- 参考故障排查章节的解决方案
## 📝 **更新日志**
- **v1.0** - 初始版本,基础端口管理功能
- **v1.1** - 添加监控脚本和自动重启功能
- **v1.2** - 添加systemd服务配置和日志轮转
- **v1.3** - 优化监控性能和告警机制