雲端服務 (傳統) Web/背景工作角色的預設 TEMP 資料夾太小
重要
截至 2024 年 9 月 1 日,所有客戶的雲端服務 (傳統) 均已淘汰。 從 2024 年 10 月開始,任何現有的執行中部署都會停止並關閉Microsoft,且數據將會永久遺失。 新部署應該使用 Azure Resource Manager 型的新部署模型 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 的部落格系列。