Files
aitsc/docs/port_management_guide.md

307 lines
6.4 KiB
Markdown
Raw 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.
# 端口管理指南
## 📋 **概述**
本指南介绍如何管理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** - 优化监控性能和告警机制