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

Azure Flask Web App搭配Azure SQL部署后每日出现500服务器错误求助

Flask Azure部署间歇性500问题排查方案

1. 优先开启全链路日志定位根因

  • 开启Flask应用的运行日志(生产环境不要开启DEBUG模式,仅开启日志输出即可),添加全局500错误捕获器,将完整异常栈打印到应用日志:
import logging
from flask import Flask

app = Flask(__name__)
# 配置日志输出级别
app.logger.setLevel(logging.INFO)

# 全局捕获500错误,输出完整异常信息
@app.errorhandler(500)
def handle_500_error(e):
    app.logger.error(f"Unhandled exception: {e}", exc_info=True)
    return "Internal Server Error", 500
  • 开启Azure App Service的日志记录:在Azure门户对应应用服务的「监视>应用服务日志」中,打开应用程序日志(文件系统),保留期限设为7天,故障发生后直接下载日志即可查看具体报错信息。

2. 排查数据库连接失效问题(匹配当前现象的最高概率原因)

Azure SQL默认会自动断开空闲超过300秒的连接,如果你使用SQLAlchemy等ORM工具未配置连接回收策略,会导致应用从连接池拿到已失效的连接,请求时报500错误,重启应用时连接池重建就会恢复正常:

  • 如果你使用Flask-SQLAlchemy,添加如下配置:
# 连接回收时间小于Azure SQL的300秒空闲超时
app.config['SQLALCHEMY_POOL_RECYCLE'] = 299
# 每次从连接池取连接前先校验连接有效性
app.config['SQLALCHEMY_ENGINE_OPTIONS'] = {
    'pool_pre_ping': True,
    'pool_recycle': 299
}
  • 排查连接泄漏问题:确认所有数据库操作完成后都正确释放连接,避免连接数占满Azure SQL的上限。

3. 排查Azure App Service配置问题

  • 开启Always On功能:在Azure门户对应应用服务的「设置>配置>平台设置」中,将Always On切换为开启状态,避免应用长时间空闲被系统自动回收后重启失败。
  • 确认运行时版本匹配:检查应用服务的Python运行时版本是否为3.8,和本地开发环境保持一致。
  • 检查WSGI服务器配置:如果你使用Gunicorn作为生产服务器,确认worker超时时间配置不低于30秒,worker数设置为2 * CPU核心数 +1,避免worker被强制Kill导致500错误。

4. 排查本地存储依赖问题

Azure App Service的本地临时存储(/tmp目录)会在应用重启、平台迁移时自动清空,如果你的应用将session、缓存、配置文件等需要持久化的数据存在本地临时目录,数据清空后会触发业务报错,重启/重部署时重新生成临时数据就会恢复正常,建议将这类持久化数据存储到Azure Redis、Azure存储或者数据库中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:54:02