你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

云服务(经典)Web 角色/辅助角色的默认 TEMP 文件夹大小太小

重要

从 2024 年 9 月 1 日开始,已弃用所有客户的云服务(经典版)。 从 2024 年 10 月开始,Microsoft 将停止并关闭任何正在运行的现有部署,数据将永久性丢失。 新部署应使用基于 Azure 资源管理器的新型部署模型 Azure 云服务(外延支持)

云服务辅助角色或 Web 角色的默认临时目录的最大大小为 100 MB,该目录可能会在某个时候被填满。 本文介绍如何避免临时目录空间不足的问题。

如果本文未解决 Azure 问题,请访问 Microsoft Q & A 和 Stack Overflow 上的 Azure 论坛。 可将问题发布到这些论坛上,或发布到 Twitter 上的 @AzureSupport。 还可提交 Azure 支持请求。 若要提交支持请求,请在 Azure 支持页上,选择“获取支持”。

为什么空间会不足?

标准 Windows 环境变量 TEMP 和 TMP 可供应用程序中运行的代码使用。 TEMP 和 TMP 都指向一个最大大小为 100 MB 的目录。 存储在此目录中的任何数据都不会在云服务的整个生命周期内持久保存。 如果回收云服务中的角色实例,则会清理该目录。

解决此问题的建议

实现以下备选方案之一:

  • 配置本地存储资源,直接对其进行访问而不使用 TEMP 或 TMP。 若要通过应用程序内运行的代码访问本地存储资源,请调用 RoleEnvironment.GetLocalResource 方法。
  • 配置本地存储资源,将 TEMP 和 TMP 目录指向本地存储资源的路径。 应在 RoleEntryPoint.OnStart 方法中进行这种修改。

下面的代码示例演示了如何在 OnStart 方法中修改 TEMP 和 TMP 的目标目录:

using System;
using Microsoft.WindowsAzure.ServiceRuntime;

namespace WorkerRole1
{
    public class WorkerRole : RoleEntryPoint
    {
        public override bool OnStart()
        {
            // The local resource declaration must have been added to the
            // service definition file for the role named WorkerRole1:
            //
            // <LocalResources>
            //    <LocalStorage name="CustomTempLocalStore"
            //                  cleanOnRoleRecycle="false"
            //                  sizeInMB="1024" />
            // </LocalResources>

            string customTempLocalResourcePath =
            RoleEnvironment.GetLocalResource("CustomTempLocalStore").RootPath;
            Environment.SetEnvironmentVariable("TMP", customTempLocalResourcePath);
            Environment.SetEnvironmentVariable("TEMP", customTempLocalResourcePath);

            // The rest of your startup code goes here…

            return base.OnStart();
        }
    }
}

后续步骤

阅读说明 如何增加 Azure Web 角色 ASP.NET 临时文件夹大小的博客。

查看更多针对云服务的 故障排除文章

若要了解如何使用 Azure PaaS 计算机诊断数据对云服务角色问题进行故障排除,请查看 Kevin Williamson 博客系列