トップ回答者
実際のWindowsAzure上で"There is not enough space on the disk"というエラーが発生する問題について

質問
-
Azure上に展開したWebページにアクセスすると下記のようなエラーが発生します。
エミュレータ環境ではなく実際に.cspkgファイルをWindowAzure上に展開しています。
通常は発生しませんが、一度発生すると同じWebアプリ配下の他のページでも同じエラーが発生するようになります。
ただし、一度表示済みのページは正常に表示されます。
ファイルアップロードなどは関係ありません。ページそのものを開く事が出来ない状態です。
エラー内容をみる限り、通常のIISでいうところの「Temporary ASP.NET Files」のフォルダにWebサイトをコンパイルして作成しようとした時に、空き容量がない、もしくはアクセスできないというエラーだと思うのですが、どなたか心当たりはありませんでしょうか。
Server Error in '/' Application.
Parser Error
Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.
Parser Error Message: There is not enough space on the disk.
Source Error:
Line 1: <%@ Page language="c#" AutoEventWireup="false" Inherits="XXXXXXXXXX.Mm0021fe.Page.Mm0021feInitPage" Codebehind="Mm0021feInit.aspx.cs" %> Line 2: <%-- Line 3: XXXXXXXXXXXXXX LIMITED CONFIDENTIAL
Source File: /mm0021fe/mm0021feInit.aspx Line: 1
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1[IOException]: There is not enough space on the disk.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at System.Web.Compilation.AssemblyBuilder.CreateCodeFileWithAssert(String generatedFilePath)
at System.Web.Compilation.AssemblyBuilder.CreateCodeFile(BuildProvider buildProvider, String& filename)
at System.Web.Compilation.AssemblyBuilder.AddCodeCompileUnit(BuildProvider buildProvider, CodeCompileUnit compileUnit)
at System.Web.Compilation.BaseTemplateBuildProvider.GenerateCode(AssemblyBuilder assemblyBuilder)
at System.Web.Compilation.AssemblyBuilder.AddBuildProvider(BuildProvider buildProvider)
[HttpParseException]: There is not enough space on the disk.at System.Web.Compilation.AssemblyBuilder.AddBuildProvider(BuildProvider buildProvider)
at System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders()
at System.Web.Compilation.BuildProvidersCompiler.PerformBuild()
at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath)
at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound)
at System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp)
at System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath)
at System.Web.HttpApplication.MaterializeHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
回答
-
今回の問題の原因ですが、可能性としてWindows Azureの本番環境では書き込みできないファイルパスに対して操作を行っていることが原因かもしれないことを指摘したいと思います。
今回提示されているSource Errorの中に
Inherits="XXXXXXXXXX.Mm0021fe.Page.Mm0021feInitPage"
という記述がありますので、この親のaspxのCode Behindでアクセスできないファイル操作を行っているために、子ページのaspxがコンパイル出来ていない可能性があるかと思います。
基本的にはローカルストレージ以外の領域に関しては書き込みができませんので、もしユーザーホームやTempフォルダなどに書き込みしようとしている場合は対処が必要になってくると思います。
制限の詳細については、こちらを参照してください。
http://msdn.microsoft.com/en-us/library/dd573363.aspxファイルアクセスの制限に関しては、Development Fabricでは再現されない制限事項になります。
もしDevelopment Fabricでは正常に動作してもWindows Azureにデプロイすると動作しないような場合、今回指摘した問題である可能性が高いかと思います。- 回答の候補に設定 normalianModerator 2011年3月11日 2:39
- 回答としてマーク normalianModerator 2011年5月29日 5:21
すべての返信
-
以下の点を確認させていただけますでしょうか。おそらくインスタンスのローカルの領域を食いつぶしているのではないかと考えています。
・「ServiceDefinition.csdef > <LocalStorage />」で巨大なストレージ領域を確保していないか
・当該Webロール内で、「ServiceDefinition.csdef > <LocalStorage />」に対して巨大なファイルを吐き出す処理を実施していないか
気にしている観点としては、「インスタンス・ストレージ」領域のデータを食いつぶしているのではないか?という点です。以下の記事を参考にして、インスタンス・サイズを「X Large」にすると問題が解決するかもしれないと考えています(根本的な解決になりませんが…)。
http://www.atmarkit.co.jp/fdotnet/dnfuture/winazureprice_01/winazureprice_01_02.html
-
今回の問題の原因ですが、可能性としてWindows Azureの本番環境では書き込みできないファイルパスに対して操作を行っていることが原因かもしれないことを指摘したいと思います。
今回提示されているSource Errorの中に
Inherits="XXXXXXXXXX.Mm0021fe.Page.Mm0021feInitPage"
という記述がありますので、この親のaspxのCode Behindでアクセスできないファイル操作を行っているために、子ページのaspxがコンパイル出来ていない可能性があるかと思います。
基本的にはローカルストレージ以外の領域に関しては書き込みができませんので、もしユーザーホームやTempフォルダなどに書き込みしようとしている場合は対処が必要になってくると思います。
制限の詳細については、こちらを参照してください。
http://msdn.microsoft.com/en-us/library/dd573363.aspxファイルアクセスの制限に関しては、Development Fabricでは再現されない制限事項になります。
もしDevelopment Fabricでは正常に動作してもWindows Azureにデプロイすると動作しないような場合、今回指摘した問題である可能性が高いかと思います。- 回答の候補に設定 normalianModerator 2011年3月11日 2:39
- 回答としてマーク normalianModerator 2011年5月29日 5:21