- - PR -
ワーカプロセスのメモリ使用量について
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-05-30 13:08
ASP.NET + Oracle8i
SERVER:Windows2000 Server SP4 CPU:1.6GB 使用可能メモリ:3.7GB メモリの使用量については過去ログにていろいろ拝見してframeworkにより ガーベージコレクションが自動で行われることなどは分かりました。 ただ現在、ワーカプロセス(aspnet_wp.exe)のメモリ使用量が300MG程度の時には 全く正常に終わるアプリケーションがメモリ使用量が500MG程度になると (その時の全体メモリ使用量1.7GB程度) 「この操作を完了するのに十分な記憶域がありません」 というエラーを返してきてしまいます。 使用可能メモリはまだ余裕があるのですがなぜなのでしょうか? machine.configのprocessModelは以下のとおりです。 <processModel enable="true" timeout="Infinite" idleTimeout="Infinite" shutdownTimeout="0:00:05" requestLimit="Infinite" requestQueueLimit="5000" restartQueueLimit="10" memoryLimit="60" webGarden="false" cpuMask="0xffffffff" userName="machine" password="AutoGenerate" logLevel="Errors" clientConnectedCheck="0:00:05" comAuthenticationLevel="Connect" comImpersonationLevel="Impersonate" responseDeadlockInterval="00:03:00" maxWorkerThreads="20" maxIoThreads="20"/> memoryLimit="60" で3.7GBの60%が2.22GBなので特に問題はなさそうなのですが。 |
|
投稿日時: 2005-05-30 13:24
こんにちは。
>CPU:1.6GB CPU:1.6GHz >300MG / 500MG 300MB / 500MB という突っ込みは置いといて、 >「この操作を完了するのに十分な記憶域がありません」 このエラーメッセージはどこから返されるメッセージなのでしょうか? なんとなく.NETの例外っぽく無いメッセージですが。 この処理の中で、MS Officeとか何か別のアプリケーションやファイルを操作してるってことはないでしょうか?もしそのような処理が行われているのであれば、情報としてあわせて記述してもらえると、何かつかみ易いかと思います。 |
|
投稿日時: 2005-05-30 13:42
noderaさん返信ありがとうございます。
そのエラーがでる処理なのですが ラベルを発行しているプログラムで出ます。 某社のラベル発行ツールを使用しています。 処理的にはイメージを読み込み、その中に 情報を出力すると。ラベルが印刷できるよう になってます。 他にもEXCELを作成し画面に浮き上がらせる ツールなども使用しています。 両方の修正モジュールを見てみましたがそん な現象は報告されてませんでした。 |
|
投稿日時: 2005-05-30 13:53
こんにちわ。
Win32 のプロセスのメモリ空間限界は 2 GB(例外アリ)だったと思います。なので、システム全体の物理メモリ量などはあまり関連しないような気がします。 また、processModel の設定は ASP.NET が強制的に終了させる限界値なので、超えたとしてもエラーが出るわけではないと思います。なのでこれもあまり関連しないような気がします。 「この操作を完了するのに十分な記憶域がありません。 (0x8007000e)」 は COM の E_OUTOFMEMORY に対応したエラーメッセージだと思います。.NET な領域でメモリが足りないのであれば System.OutOfMemoryException が発生すると思います。 なので、 Oracle の接続にもし OLEDB Provider をご利用であれば、その状況に何か現象を出すためのトリガーがあるような気がします。その他、COM 的なものを疑ってみるといいのではないかと思います。 なお、 Oracle 8i の oci.dll か何かはマルチスレッドに対応していないみたいです。となると Web アプリにはあんまり向かないじゃないかと思います。 http://support.oracle.co.jp/open/owa/external_krown2.f_detail?c_criterion=%7B16381%7D&i_key=CyberOOW&c_document_id=16381 hope it helps D, an alchemist. |
|
投稿日時: 2005-05-30 14:00
こんにちは。
そうなるとASP.NETというより、そのラベル発行ツールが怪しいですね。 そのツールは、単独のアプリケーションなのでしょうか?それともライブラリ?(マネージドかそうではないのかでも変わってきますが、なんとなくアンマネージドかな) メモリ使用量が300MBと500MBのときの違いはなんでしょう? ツールが耐えられないようなイメージデータを渡しているとかないですか? |
|
投稿日時: 2005-05-30 15:29
D, an alchemistさん返信ありがとうございます。
>こんにちわ。 >Win32 のプロセスのメモリ空間限界は 2 GB(例外アリ)だったと思います。なので、システム全体の物理メモリ量などはあまり関連しないような気がします。 ここでお聞きしたいのが、その場合にはメモリ使用量はまだまだ増加しても 大丈夫なのでしょうか?ガーベージコレクションが早く実行されてメモリが 早く開放されて欲しいのですが、まだ開放する時ではないということなので しょうか?怖いのがSessionをやたら使っているみたいでremoveとかがして いないプログラムがかなりありそうなのですが、それらがメモリ上に残って 消せないという可能性もあるのですが・・・ >また、processModel の設定は ASP.NET が強制的に終了させる限界値なので、超えたとしてもエラーが出るわけではないと思います。なのでこれもあまり関連しないような気がします。 この前、他のメモリが少ないマシンでテストした時には ワーカプロセスがそのメモリを超すと自動的に終了しました。 その時にはサーバのイベントビューアにエラーとして出てました。 その時には一般の画面にはセッションタイムアウト(ワーカを落とす とログイン情報が消えてしまうので)を返しているようです。 >「この操作を完了するのに十分な記憶域がありません。 (0x8007000e)」 >は COM の E_OUTOFMEMORY に対応したエラーメッセージだと思います。.NET な領域でメモリが足りないのであれば System.OutOfMemoryException が発生すると思います。 最初は 「この操作を完了するのに十分な記憶域がありません。 (0x8007000e)」 が出てましたがしばらくしてメモリ使用量がが700MBを超すと 今度は.netでSystem.OutOfMemoryException: メモリが不足しています。 が出てきました。 COM の E_OUTOFMEMORYが発生しその後にはASP.NETのOutOfMemoryExceptionが出て いるようにもみえます。 COM の E_OUTOFMEMORYがでないようにするにはどのような手段があるのでしょうか? タスクマネージャでエラー時にはこんな感じになってました。 --------------------------------------------------- タスクマネージャのパフォーマンスのタグ **CPU使用率 1%〜20%程度 **合計 ハンドル 15491 スレッド 992 プロセス 75 **コミットチャージ 合計 1866412 制限値 5728080 最大値 2082256 **物理メモリ 合計 3799528 利用可能 1741648 システムキャッシュ 1854624 **カーネルメモリ 合計 131740 ページ 101912 非ページ 30668 --------------------------------------------- プロセスのタグ aspnet_wp.exe 623,076 KB --------------------------------------------- comのエラーが発生しているのとワーカプロセスの メモリ使用量は切り離して考えた方が良いのでしょうか? noderaさん返信ありがとうございます。 >そうなるとASP.NETというより、そのラベル発行ツールが怪しいですね。 >そのツールは、単独のアプリケーションなのでしょうか?それともライブラリ?(マネージドかそうではないのかでも変わってきますが、なんとなくアンマネージドかな) >メモリ使用量が300MBと500MBのときの違いはなんでしょう? >ツールが耐えられないようなイメージデータを渡しているとかないですか? 出力する帳票は300MBの時も500MBの時も同じものを出力するようにしていますので ツールが耐えれないイメージデータを渡していることはないです。 私はワーカプロセスのメモリ使用量に着眼してしまっていましたが 帳票の出力ツールがCOMにデータを送る時にメモリが不足しているの かもしれません。 もう少し調査をします。 |
|
投稿日時: 2005-05-30 16:35
たぶん、
まずは E_OUTOFMEMORY を出しているのがどこのどいつで、何故エラーを出しているかのを突き止め、それから .NET な世界のメモリ状況について検討するのがいいと思います。 なお、 私の個人的な経験では、ASP.NET のワーカープロセスがまともに動くのは Workingset が 800MB くらいまでで、それをこえると OutOfMemoryException が頻発したり、CPU 100% になったりしたと記憶しています。 hope it helps D, an alchemist. |
|
投稿日時: 2005-05-30 17:39
D, an alchemistさん返信ありがとうございます。
今見てたのですが、どうもワーカプロセスが500MB付近になると .NETでもOut of memoryを出しているようです。 おかしい現象はテストマシンにて重い処理を故意的に流してみると メモリエラーになる前にガーベージコレクションが効いてメモリ使用量 は途中でかなり開放されますが、本番のマシンではメモリ使用量がどん どん上昇していく一方で減らないような気がします。 後、朝方にServerのイベントビューアにエラーが発生しています。 これも気になるのですが・・・ 日付:2005/05/30 ソース:RAID_SERVER 時刻:9:32 分類:デバイス 種類:エラー イベントID:140 ユーザ:N/A コンピュータ:XXXXXXXXX←サーバのコンピュータ名 説明: Raid Server Alert Message:Registration Sever Connection Lost |