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

Azure Linux Web应用自动重启及Django部署优化咨询

问题根因说明

镜像大小未超15GB配额仍然触发资源不足重启,核心原因是混淆了两类独立的配额限制:

Azure Linux Web App的15GB限制是容器镜像存储配额,仅限制拉取到平台的镜像文件大小;容器运行时实际可用的可写磁盘空间、内存容量,完全由所选定价层决定,和镜像本身大小没有直接关联。

Django运行过程中产生的本地日志、临时缓存文件、WSGI worker进程内存泄漏、用户上传文件默认落本地、静态资源重复生成,都会快速吃满运行时分配的临时磁盘和内存,触发平台健康检查机制,强制重启容器。

优化部署方案

一、镜像瘦身,降低基础资源开销

5-6GB的镜像体积本身就会占用大量启动时内存和临时磁盘空间,常规Django项目的生产镜像完全可以控制在1GB以内:

  • 换用slim/alpine版本的Python基础镜像,不要用带全量系统工具、调试依赖的官方默认镜像,比如用python:3.11-slim-bookworm替代python:3.11,单基础镜像体积就能从900MB+降到150MB左右
  • 采用多阶段构建:构建阶段单独安装gcc、python-dev等编译类依赖,运行阶段仅拷贝编译完成的Python依赖包和项目代码,不要把构建工具、pip缓存、测试用例、.git目录、开发环境配置打进生产镜像,参考构建模板:
# 构建阶段
FROM python:3.11-slim-bookworm AS builder
WORKDIR /build
RUN apt-get update && apt-get install -y --no-install-recommends gcc python3-dev
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt

# 运行阶段
FROM python:3.11-slim-bookworm
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
CMD ["gunicorn", "yourproject.wsgi:application", "--bind", "0.0.0.0:8000"]
  • 不要把大体积静态资源、媒体文件、AI模型打包进镜像,这类资源统一存到对象存储服务
  • 构建镜像时加--no-cache-dir参数,避免pip缓存、系统包缓存残留在镜像层里

二、运行时资源占用优化

  • 替换WSGI服务配置:用gunicorn搭配meinheld worker,比默认的sync worker、uWSGI内存占用低30%左右;worker数量按照CPU核心数*2+1配置,不要开过多worker抢占内存;添加--max-requests 1000 --max-requests-jitter 50启动参数,每个worker处理1000个请求后自动重启,避免Python内存泄漏累积占满内存
  • 关闭本地日志落盘:把Django应用日志、gunicorn访问日志全部配置为输出到stdout/stderr,交给平台自带的日志系统收集,不要在容器内写日志文件占用磁盘
  • 临时目录路径调整:如果业务必须生成本地临时文件,把/tmp目录映射到平台提供的共享存储路径,不要占用容器自身的可写临时层
  • 关闭Django的DEBUG模式,避免调试模式下生成的SQL查询缓存、请求上下文缓存长期占用内存

三、适配PaaS平台特性调整架构

  • 静态资源、媒体文件全走对象存储:安装对应存储SDK,配置Django的STATICFILES_STORAGE、DEFAULT_FILE_STORAGE后端直接对接对象存储,执行python manage.py collectstatic时直接把静态文件同步到对象存储,完全不占用容器本地磁盘
  • 打开平台持久化存储开关:配置WEBSITES_ENABLE_APP_SERVICE_STORAGE=true,启用的持久化存储独立于容器运行时临时磁盘配额,不会被临时资源占满,也不会在容器重启时清空数据
  • 配置资源阈值告警:在平台侧设置可用内存、临时磁盘占用率告警,当占用超过80%时提前排查异常进程,不要等平台触发强制重启

四、备选部署选型

如果做了以上优化后资源仍然紧张,可以根据业务情况调整部署目标:

  • 升级定价层:免费层、共享层的运行时临时磁盘仅1GB、内存仅1-2GB,很容易被打满,基础B系列及以上定价层有10GB+临时磁盘、1.75GB以上内存,足够支撑大部分中小流量Django应用
  • 换用容器实例类服务部署:如果应用本身内存、磁盘需求较高,可选择支持自定义资源配额的容器服务部署,不受App Service固定配额限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:36:20