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

重要

新客户的云服务(经典版)现已弃用,并将于 2024 年 8 月 31 日对所有客户停用。 新部署应使用基于 Azure 资源管理器的新型部署模型 Azure 云服务(外延支持)

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

如果本文未解决 Azure 问题,请访问 Microsoft Q&A 和 Stack Overflow 上的 Azure 论坛。 可以在这些论坛上发布问题。 还可提交 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 博客系列