none
実際のWindowsAzure上で"There is not enough space on the disk"というエラーが発生する問題について RRS feed

  • 質問

  • 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)

    2010年8月4日 5:14

回答

  • 今回の問題の原因ですが、可能性として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にデプロイすると動作しないような場合、今回指摘した問題である可能性が高いかと思います。

    2010年8月11日 17:57
    モデレータ

すべての返信

  • 以下の点を確認させていただけますでしょうか。おそらくインスタンスのローカルの領域を食いつぶしているのではないかと考えています。

    ・「ServiceDefinition.csdef > <LocalStorage  />」で巨大なストレージ領域を確保していないか

    ・当該Webロール内で、「ServiceDefinition.csdef > <LocalStorage  />」に対して巨大なファイルを吐き出す処理を実施していないか

     

    気にしている観点としては、「インスタンス・ストレージ」領域のデータを食いつぶしているのではないか?という点です。以下の記事を参考にして、インスタンス・サイズを「X Large」にすると問題が解決するかもしれないと考えています(根本的な解決になりませんが…)。

    http://www.atmarkit.co.jp/fdotnet/dnfuture/winazureprice_01/winazureprice_01_02.html

    2010年8月10日 18:01
    モデレータ
  • 今回の問題の原因ですが、可能性として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にデプロイすると動作しないような場合、今回指摘した問題である可能性が高いかと思います。

    2010年8月11日 17:57
    モデレータ