次の方法で共有

Powershell実行時のメモリ制限について

Anonymous
2019-06-13T01:44:20+00:00

お世話になっております。

現在、外部のスケジューラを使用して夜間にバッチ処理のPowershellを実行しているのですが

あるときから以下のようなOutOfMemoryExceptionが発生するようになりました。

[Error] System.OutOfMemoryException: 種類 'System.OutOfMemoryException' の例外がスローされました。

   場所 System.Collections.Hashtable..ctor(Int32 capacity, Single loadFactor)

   場所 Microsoft.PowerShell.Commands.Internal.Format.MshExpression.ResolveNames(PSObject target, Boolean expand)

   場所 Microsoft.PowerShell.Commands.Internal.Format.MshExpression.GetValues(PSObject target, Boolean expand, Boolean eatExceptions)

   場所 Microsoft.PowerShell.Commands.OrderByPropertyEntryEvaluationHelper.EvaluateSortingExpression(MshParameter p, PSObject inputObject, List1 orderValues, List1 errors, String& propertyNotFoundMsg)

   場所 Microsoft.PowerShell.Commands.OrderByPropertyEntryEvaluationHelper.ProcessObject(PSObject inputObject, List1 mshParameterList, List1 errors, List`1 propertyNotFoundMsgs, Boolean isCaseSensitive, CultureInfo cultureInfo)

   場所 Microsoft.PowerShell.Commands.OrderByProperty.CreateOrderMatrix(PSCmdlet cmdlet, List1 inputObjects, List1 mshParameterList)

   場所 Microsoft.PowerShell.Commands.OrderByProperty..ctor(PSCmdlet cmdlet, List`1 inputObjects, Object[] expr, Boolean ascending, CultureInfo cultureInfo, Boolean caseSensitive)

   場所 Microsoft.PowerShell.Commands.SortObjectCommand.EndProcessing()

   場所 System.Management.Automation.Cmdlet.DoEndProcessing()

   場所 System.Management.Automation.CommandProcessorBase.Complete()

バッチ処理で使用しているインプットファイルのサイズは日々増加していますが、エラーが発生するようになった前後で

大きな変化はありませんでした。

また、バッチ処理中にもメモリには数GBの余裕があります。

バッチ処理のスクリプトを手動で実行すると、エラーが発生せずに正常に終了するため

スケジューラで実行する場合に何かしらメモリ使用量に制限がかかっているのではないかと考えています。

Powershellが使用するメモリの設定値は以下のようになっていました

WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Shell

Type            Name                           SourceOfValue   Value

----            ----                           -------------   -----

System.String   MaxMemoryPerShellMB                            2147483647

WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Plugin\microsoft.powershell\Quotas

Type            Name                           SourceOfValue   Value

----            ----                           -------------   -----

System.String   MaxMemoryPerShellMB                            2147483647

上記を踏まえて

①手動実行とスケジューラ実行でPowershellが使用可能なメモリに差はあるのか

②MaxMemoryPerShellMBのValue 2147483647は設定値として有効(実質無制限)なのか

についてご教示いただけますでしょうか。

家庭向け Windows | その他 | アプリ

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

2 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2019-06-13T01:45:59+00:00

    お世話になっております。

    現在、外部のスケジューラを使用して夜間にバッチ処理のPowershellを実行しているのですが

    あるときから以下のようなOutOfMemoryExceptionが発生するようになりました。

    [Error] System.OutOfMemoryException: 種類 'System.OutOfMemoryException' の例外がスローされました。

       場所 System.Collections.Hashtable..ctor(Int32 capacity, Single loadFactor)

       場所 Microsoft.PowerShell.Commands.Internal.Format.MshExpression.ResolveNames(PSObject target, Boolean expand)

       場所 Microsoft.PowerShell.Commands.Internal.Format.MshExpression.GetValues(PSObject target, Boolean expand, Boolean eatExceptions)

       場所 Microsoft.PowerShell.Commands.OrderByPropertyEntryEvaluationHelper.EvaluateSortingExpression(MshParameter p, PSObject inputObject, List1 orderValues, List1 errors, String& propertyNotFoundMsg)

       場所 Microsoft.PowerShell.Commands.OrderByPropertyEntryEvaluationHelper.ProcessObject(PSObject inputObject, List1 mshParameterList, List1 errors, List`1 propertyNotFoundMsgs, Boolean isCaseSensitive, CultureInfo cultureInfo)

       場所 Microsoft.PowerShell.Commands.OrderByProperty.CreateOrderMatrix(PSCmdlet cmdlet, List1 inputObjects, List1 mshParameterList)

       場所 Microsoft.PowerShell.Commands.OrderByProperty..ctor(PSCmdlet cmdlet, List`1 inputObjects, Object[] expr, Boolean ascending, CultureInfo cultureInfo, Boolean caseSensitive)

       場所 Microsoft.PowerShell.Commands.SortObjectCommand.EndProcessing()

       場所 System.Management.Automation.Cmdlet.DoEndProcessing()

       場所 System.Management.Automation.CommandProcessorBase.Complete()

    バッチ処理で使用しているインプットファイルのサイズは日々増加していますが、エラーが発生するようになった前後で

    大きな変化はありませんでした。

    また、バッチ処理中にもメモリには数GBの余裕があります。

    バッチ処理のスクリプトを手動で実行すると、エラーが発生せずに正常に終了するため

    スケジューラで実行する場合に何かしらメモリ使用量に制限がかかっているのではないかと考えています。

    Powershellが使用するメモリの設定値は以下のようになっていました

    WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Shell

    Type            Name                           SourceOfValue   Value

    ----            ----                           -------------   -----

    System.String   MaxMemoryPerShellMB                            2147483647

    WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Plugin\microsoft.powershell\Quotas

    Type            Name                           SourceOfValue   Value

    ----            ----                           -------------   -----

    System.String   MaxMemoryPerShellMB                            2147483647

    上記を踏まえて

    ①手動実行とスケジューラ実行でPowershellが使用可能なメモリに差はあるのか

    ②MaxMemoryPerShellMBのValue 2147483647は設定値として有効(実質無制限)なのか

    についてご教示いただけますでしょうか。

    マイクロソフト コミュニティは一般ユーザー向けのフォーラムなので Technet フォーラム が適当かと

    Microsoft フォーラム を参照

    移動した場合は移動した旨とそのスレッドのリンクをレス願います

    この回答は役に立ちましたか?

    1 人がこの回答が役に立ったと思いました。
    0 件のコメント コメントはありません
  2. Hebikuzure aka Murachi Akira 325.7K 評価のポイント MVP ボランティア モデレーター
    2019-06-13T04:55:18+00:00

    TechNet フォーム「Powershell実行時のメモリ制限について」に続きます

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません