You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署在DigitalOcean Droplet的Flask服务器闲置一天后异常终止求助

解决Flask服务闲置后终止的问题

核心排查方向

  • 服务未配置进程守护:手动启动WSGI服务器时,进程意外退出或系统资源回收会导致服务终止,且无法自动恢复。
  • debug模式残留风险:代码中保留的debug=True在生产环境会引发进程不稳定,自动重载等特性可能导致服务崩溃。
  • 系统资源限制:Droplet内存不足时,OOM Killer会终止占用资源的WSGI进程。

具体解决步骤

1. 禁用Flask的debug模式

修改代码,彻底关闭生产环境的debug模式:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
    return '<h1>Hello!</h1>'

if __name__ == "__main__":
    app.run(debug=False)  # 强制关闭debug模式

也可通过环境变量控制,避免代码硬编码:

import os
app.run(debug=os.environ.get('FLASK_DEBUG') == '1')

生产部署时不要设置FLASK_DEBUG=1环境变量。

2. 用systemd配置进程守护

创建systemd服务文件,实现WSGI进程的自动重启与开机自启:

  1. 创建服务文件:
sudo nano /etc/systemd/system/flask-app.service
  1. 写入配置(根据实际路径和WSGI服务器调整,示例用gunicorn):
[Unit]
Description=Flask App WSGI Server
After=network.target

[Service]
User=your-username
Group=www-data
WorkingDirectory=/path/to/your/app
ExecStart=/usr/bin/gunicorn --workers 3 --bind 0.0.0.0:8000 app:app
Restart=always
RestartSec=5
Environment="PATH=/path/to/your/venv/bin"

[Install]
WantedBy=multi-user.target
  1. 启动并启用服务:
sudo systemctl daemon-reload
sudo systemctl start flask-app.service
sudo systemctl enable flask-app.service

3. 检查系统资源与OOM日志

若怀疑内存不足导致进程被杀死,查看OOM日志:

dmesg | grep -i oom

若发现WSGI进程被终止,可升级Droplet内存规格,或减少WSGI worker数量(调整--workers参数)。

4. 优化反向代理(如Nginx)配置

若使用Nginx做反向代理,添加超时与健康检查配置,避免闲置连接异常:

location / {
    proxy_pass http://127.0.0.1:8000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    
    proxy_connect_timeout 5s;
    proxy_send_timeout 10s;
    proxy_read_timeout 10s;
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}

验证方法

手动终止WSGI进程测试自动恢复:

sudo pkill gunicorn

查看服务状态确认重启:

sudo systemctl status flask-app.service

等待24小时后访问服务,验证是否仍出现502错误。

内容的提问来源于stack exchange,提问作者Zain Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 09:00:55