QA@IT
«回答へ戻る

回答を投稿

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さん返信ありがとうございます。

>こんにちわ。 

>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にデータを送る時にメモリが不足しているの
かもしれません。

もう少し調査をします。




投稿者:よねちん