- PR -

ワーカプロセスのメモリ使用量について

投稿者投稿内容
よねちん
ベテラン
会議室デビュー日: 2002/09/18
投稿数: 55
投稿日時: 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なので特に問題はなさそうなのですが。


nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2005-05-30 13:24
こんにちは。

>CPU:1.6GB
CPU:1.6GHz
>300MG / 500MG
300MB / 500MB

という突っ込みは置いといて、

>「この操作を完了するのに十分な記憶域がありません」
このエラーメッセージはどこから返されるメッセージなのでしょうか?
なんとなく.NETの例外っぽく無いメッセージですが。

この処理の中で、MS Officeとか何か別のアプリケーションやファイルを操作してるってことはないでしょうか?もしそのような処理が行われているのであれば、情報としてあわせて記述してもらえると、何かつかみ易いかと思います。
よねちん
ベテラン
会議室デビュー日: 2002/09/18
投稿数: 55
投稿日時: 2005-05-30 13:42
noderaさん返信ありがとうございます。

そのエラーがでる処理なのですが
ラベルを発行しているプログラムで出ます。
某社のラベル発行ツールを使用しています。
処理的にはイメージを読み込み、その中に
情報を出力すると。ラベルが印刷できるよう
になってます。

他にもEXCELを作成し画面に浮き上がらせる
ツールなども使用しています。

両方の修正モジュールを見てみましたがそん
な現象は報告されてませんでした。
D, an alchemist
会議室デビュー日: 2005/02/02
投稿数: 11
投稿日時: 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.
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2005-05-30 14:00
こんにちは。

そうなるとASP.NETというより、そのラベル発行ツールが怪しいですね。
そのツールは、単独のアプリケーションなのでしょうか?それともライブラリ?(マネージドかそうではないのかでも変わってきますが、なんとなくアンマネージドかな)

メモリ使用量が300MBと500MBのときの違いはなんでしょう?
ツールが耐えられないようなイメージデータを渡しているとかないですか?
よねちん
ベテラン
会議室デビュー日: 2002/09/18
投稿数: 55
投稿日時: 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にデータを送る時にメモリが不足しているの
かもしれません。

もう少し調査をします。


D, an alchemist
会議室デビュー日: 2005/02/02
投稿数: 11
投稿日時: 2005-05-30 16:35
たぶん、
まずは E_OUTOFMEMORY を出しているのがどこのどいつで、何故エラーを出しているかのを突き止め、それから .NET な世界のメモリ状況について検討するのがいいと思います。

なお、
私の個人的な経験では、ASP.NET のワーカープロセスがまともに動くのは Workingset が 800MB くらいまでで、それをこえると OutOfMemoryException が頻発したり、CPU 100% になったりしたと記憶しています。



hope it helps
D, an alchemist.
よねちん
ベテラン
会議室デビュー日: 2002/09/18
投稿数: 55
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)