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

Azure App Service Plan临时存储耗尽排查求助

排查Azure App Service临时存储占用不匹配问题

1. 排查已删除但被进程锁定的文件

Windows系统中,已删除但被进程占用的文件不会立即释放磁盘空间,这类文件无法通过普通文件统计命令捕获。可通过以下PowerShell命令在Kudu中排查:

# 枚举持有已删除临时目录文件句柄的进程
Get-WmiObject Win32_Process | ForEach-Object {
    $proc = $_
    $proc.GetOwner() | Out-Null
    $owner = "$($_.Domain)\$($_.User)"
    Get-WmiObject Win32_OpenFile | Where-Object { $_.ProcessId -eq $proc.ProcessId } | ForEach-Object {
        if ($_.FileName -match 'C:\\local|D:\\local') {
            [PSCustomObject]@{
                ProcessId    = $proc.ProcessId
                ProcessName  = $proc.Name
                Owner        = $owner
                LockedFile   = $_.FileName
            }
        }
    }
} | Format-Table -AutoSize

找到对应进程后,可尝试重启单个App Service释放句柄,无需全量重启所有服务。

2. 验证SCM分离导致的存储隐藏

虽然WEBSITE_DISABLE_SCM_SEPARATION为legacy模式,但可在单个测试服务上临时验证:

  • 进入目标App Service的「配置」→「应用程序设置」,添加WEBSITE_DISABLE_SCM_SEPARATION并设为true
  • 重启服务后,重新执行原存储统计脚本对比用量
  • 验证完成后立即移除该设置,避免影响生产环境稳定性

3. 排查遗漏的临时存储目录

检查环境变量指向的临时目录

部分服务的临时文件可能写入%TEMP%环境变量指向的路径,而非固定的D:\local\Temp:

# 查看当前服务的TEMP路径
echo $env:TEMP

# 统计该路径的存储占用
[math]::Round((Get-ChildItem -Path $env:TEMP -Recurse | Measure-Object -Property Length -Sum).Sum / 1GB, 2)

检查日志目录堆积

部分服务会将日志写入C:\local\Logs等子目录,可单独统计该目录占用:

[math]::Round((Get-ChildItem -Path C:\local\Logs -Recurse | Measure-Object -Property Length -Sum).Sum / 1GB, 2)

4. 机器级存储明细排查

同一App Service Plan下的所有服务共享机器级临时存储,若上述方法无法定位,可通过以下方式获取机器级明细:

  • 进入「Azure App Service Diagnostics」→「Advanced Tools」→「Process Explorer」,查看机器级文件占用情况
  • 若权限不足,提交Azure支持工单,请求后台查看机器级存储的具体文件分布

临时缓解与长期方案

  • 临时缓解:定位到占用异常的服务后,单独重启该服务释放资源,无需调整Plan或全量重启
  • 长期方案:
    • 禁止向临时目录写入持久化数据,改用Blob Storage等持久化存储方案
    • 配置日志轮转策略,避免日志文件无限堆积
    • 添加启动任务定期清理临时目录(需注意避免删除正在使用的文件)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:26:08