w3wp.exeがメモリを大量に消費する


8

Small Business Server 2011のインストールでは、w3wp.exeプロセスの総数が不釣り合いな大量のメモリを使用しているように見えます。SBSの標準インストールには、合計7つのサイトと20のASP.NETアプリケーションプール(Sharepoint、Exchange、WSUS、およびリモートWebワークプレースのようなSBS固有のもの)が付属しています。

結果として生じる数十のw3wp.exeプロセスは、時間の経過とともに4 GBを超えるサーバーのメモリを消費する傾向があり、ピークのアプリケーションプールはワーキングセットに約800 MBのWSUSに属するものです。IIS MMCを介してアプリケーションプールを手動でリサイクルすると、メモリ使用量を一時的に減らすことができます(w3wp.exeプロセスは10 MBに戻り、一部はすぐに再成長します)が、管理者が一日中やりたいことではありません。SBSがプリインストールされているアプリケーションプールの自動リサイクルに関する推奨事項を見つけることができなかったため、運用システムで「ただ実行する」ことに少し消極的です。

これを制限する方法に関するネットでの私の調査は、メモリが「他のアプリケーションで必要なときに解放される」ため、w3wpのメモリ消費は害を及ぼすことはなく、パフォーマンスに利益をもたらすという多数の投稿を投げました。問題はそれがうまくいかないことです:

  • 1つは、SBSはマルチロールサーバーであり、その役割の1つ(主要な役割)はCIFSネットワークストレージです。これは、「他のどのプロセスでも使用されていない」のようにメモリが「フリー」であることに依存するファイルシステムキャッシュから非常にメリットを得ます。方法」-ユーザーをほとんど認識せず、メモリを消費するASP.NETアプリケーションプールは逆効果です
  • もう1つは、メモリ不足時にw3wpインスタンスのメモリ消費が大幅に減少することを確認する必要があることです。代わりに、100 mbを大幅に下回るわずかな減少と過度のスワッピングが発生し、パフォーマンスが低下しています。

IISまたはASP.NETアプリを管理することはほとんどないので、アプリケーションプールのメモリ要件を効果的に調整する方法についてのアイデアは大歓迎です。


このASP.NETアプリは何をしますか?アプリがLinq-To-SQLまたはEntity Frameworkとの接続を閉じるのに失敗すると、w3wp.exeが大量のメモリを使用するのを見てきました。
ネイト

いくつかあります。多くはOWA / OMAや同期サービスなどのExchangeに関連しています。非常に大きいものの1つはWSUSであり、一部はSharepointまたはカスタマイズされたSBS固有(CompanyWeb、リモートWebワークプレース)サイトに使用されます
the-wabbit

回答:


7

SBSの素晴らしい世界へようこそ。RAMの推奨要件は10GBで、最低8GBが必要です。(Microsoftによると)。それは微調整されたよく油を塗った機械ではありません...それは非常にずさんで肥大していて、太陽の下ですべてが束ねられています。そのボックスに投入できるRAMが多ければ多いほど... 残念ながら、最大32GBに制限されています。どっちが……ばかげている。


私は私の答えを少し洗練すべきだと思います。消費するRAMの量が気になる場合は、次のいずれかを実行することで、多くの時間/頭痛を節約できます。A)SBSを使用しない...標準サーバーを使用し、必要な役割を設定個別に。またはB)RAMがかなり安価であるため、システムにRAMを追加します。SBSは非常に小規模なオフィス(10〜20台のワークステーション)向け設計されており、あまり拡張性がありません。
TheCompWiz 2012年

ご回答有難うございます。私が動作を観察したシステムには、物理​​的な制限である16 GBのRAMがありました。利用可能なメモリは、Exchangeのstore.exeと、SQL Serverの多数のインスタンスとw3wp.exeですぐにいっぱいになりました。ExchangeとSQL Serverシステムを頻繁に管理しているので、他の2つのメモリの過剰な消費問題に対処する方法を知っていますが、w3wpを使用すると多少困ります。ネットワーク自体のユーザーはわずか11人です。
the-wabbit

Exchange、SQL Server、およびIISにはすべて、「キャッシュされた」データ用に100%のRAMを試行して消費するメカニズムがあります。何か他のものが要求より多くのRAMをした場合...すべての3がされているはず他のサービスがスワッピングに頼らずに実行できるようにスケールバックに。(理論的には)しかし、実際には、いくつかのことにパンチを入れて転がさなければならないことがわかります...手動ですべてを調整してハードリミットを設定できます...しかし、あなたはしっぽを追いかけるでしょうそれです。IISでのアプリケーションプールの制限について数年前に読んだ記事が見つかるかどうかを確認します...
TheCompWiz



7

これは私がやったことです:

この回答で提案さweb.config%WINDIR%\Microsoft.NET\Framework\<version>\ConfigているようにatでprivateBytesLimitパラメータを設定して、.NET AppPoolsのサーバーアプリケーションキャッシュを低い値(5 MB)に設定します

    <configuration>
      <system.web>
         <caching>
           <cache privateBytesLimit="5242880" privateBytesPollTime="00:01:00" />
         </caching>
      </system.web>
    </configuration>

これにより、デフォルトのプールリサイクル設定でメモリ使用量を1 GBをやや超える程度に減らすことができました。

明らかに、「サーバー」タイプのガベージコレクター(<gcServer = "true">を使用すると、メモリの消費量大幅に増える可能性<gcServer>がありますが、デフォルトではfalseに設定されているようです。


参考までに、私たちはこれらの記事を読んだ後、gcserverをfalseに設定し始めました: forums.asp.net/t/1654596.aspx/1 およびmsdn.microsoft.com/en-us/library/ff647787.aspx
Greg Askew

@ the-wabbitサーバーのガベージコレクションが同時に行われるようになったため、gcServer = falseを設定するというアドバイスは現在も有効ですか?
Michael Steele 2017年

6

結果として生じるメモリ消費がソフトウェアの欠陥による問題であると思われる場合は、Microsoft DebugDiag 1.2を使用して完全なメモリダンプを作成し、一般的な問題についてダンプを分析できます。メモリの問題があると思われる場合は、[リークの監視]オプションを選択してリーク追跡を有効にし、ダンプを作成/分析する前にしばらく実行する必要があります。

DebugDiag 1.2ダウンロード
https://www.microsoft.com/download/en/details.aspx?id=26798

ここに画像の説明を入力してください

ここに画像の説明を入力してください

ここに画像の説明を入力してください


リンクをありがとう、私はそれを試してみるつもりです。MSIインストールパッケージは、ローカライズされた(US-Englisch以外の)バージョンのWindowsで実行すると問題があるようです。回避策があるかどうか確認する必要があります。
the-wabbit

2

すべてのアプリに個別のアプリプールは必要ありません。信頼できないアプリや優先したいアプリだけです。多くのユーザーが共有できます(異なる.netバージョンを個別に保持)。その後、アプリプールが使用するメモリをより現実的に制限できます。1日に1回以上プールを繰り返しリサイクルする必要はありません。

また、この方法で解放できるメモリは非常に多くなります。一部はキャッシュされますが、各アプリには特定のWebアプリに大きく依存する一定量の作業メモリが必要です。これを過度に制限しようとすると、事態は深刻化します。

問題は、SBSが一度に多くのことを実行しようとすることです。実際に使用しているものを確認し、使用していないものをシャットダウンする必要があります。

しかし、たった11人のユーザーに正直に言うと、残りのメモリはどこに行くのでしょうか。ExchangeとSQLを使用すると、12Gbを超える必要ありません。


ああ、SBSの美しさを体験したことはありませんか?Exchangeのインフォメーションストアは制限されていない場合に8 GBに増加し、複数のSQLサーバーインスタンスが喜んでさらに3 GBを占有します。ほとんどのアプリプールは、同じ.NETバージョンで同じセキュリティコンテキスト内で1〜2個のアプリケーションを実行しています。しかし、サポートの問題のため、それらを再グループ化することはできません。また、メモリの問題を解決する可能性はほとんどありません。12個の小さいプロセスではなく4つの1 GBプロセスがある場合、あまり多くは得られません。
the-wabbit

アプリプールが少ない場合の違いは、さまざまなキャッシュが定期的に使用されているものでいっぱいになり、使用されていないものを押し出すことです。たくさんのアプリプールがあると、もっと無駄になるでしょう。11人のユーザーで実際に必要なセキュリティコンテキストはいくつですか。はい。Exchangeは、手に入るメモリをできるだけ多く使用しますが、制限すると、少数のユーザーに対して2GBで実行することもできます。SBSでは、あらゆる場所でベストプラクティスを使用したり、オプションのいずれかを最適に実行したりすることはできないことを受け入れる必要があります。少々実用的であり、やりすぎないようにする必要があります。
JamesRyan、2012年

サーバーでインスタンスを20個実行しようとしているのなら、すべてをメモリに詰め込もうとしているのも不思議ではありません。それは物事を全く異なる見方に置くので、あなたは本当にそれを問題で言及するべきでした。
JamesRyan、2012年

私は実際にはそうではありません。問題は、めったに使用されないアプリプールがはるかに価値の高いファイルシステムキャッシュからメモリを盗む物理システムで発生します。これは、アプリケーションプール内のオブジェクトキャッシングが原因であると思われ、キャッシュを削減または無効にするための手段を探していました。
the-wabbit
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.