- - PR -
ASPNET_WP.exeが突然再起動される。
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-03-18 14:37
お世話になります。
環境 OS:Windows 2000 Server SP3 VB:VisualStudio.NET 2003(VB.NET、ASP.NET) .NET FrameWork1.1(SPなし) DB:PostgreSQL8.1 上記の環境でWebシステムを作成しているのですが、 ASPNET_WP.exeのメモリが40MB〜50MBを消費した時点で再起動されてしまいます。 その際、サーバのイベントログには必ず以下の2種類が書き込まれます。 1.COM+のエラー 種類 :エラー ソース :COM+ 分類 :SVC イベントID:4194 内容 :システムがカスタム コンポーネントを呼び出しましたが、そのコンポーネン トは失敗して例外が生成されました。これはカスタム コンポーネントに問題 があることを示しています。このコンポーネントの開発者にエラーが発生した ことを通知し、以下の情報を提供してください。 コンポーネントの Prog ID: 0[ODBC][Env 4f912a0] メソッド名: IDispenserDriver::CreateResource プロセス名: aspnet_wp.exe このエラーが深刻であるため、プロセスを終了します。 例外: C0000005 アドレス: 0x1002EDAF 呼び出しスタック: psqlodbcw + 0x2EDAF 2.COM+のエラー 種類 :エラー ソース :ASP.NET 1.1.4322.0 分類 :なし イベントID:1000 内容 :aspnet_wp.exe (PID: 688) stopped unexpectedly. psqlodbcw(PostgreSQLのODBCコンポーネント)でエラーとなっていたため、 最新版の8.1.3にバージョンアップしましたが結果は同じでした。 メモリ消費でのaspnet_wp.exeを避けたかったため、Machine.ConfigのSessionStateの MemoryLimitは80に設定してあり、サーバ全体の消費率をみてもそこまで至っていません。 まったく原因が分からないので、どなたか教えていただけませんか? | ||||||||
|
投稿日時: 2006-03-18 14:46
自己レスです。
間違えた部分を修正します。 誤:2.COM+のエラー 正:2.aspnet_wp.exeのエラー 誤:メモリ消費でのaspnet_wp.exeを避けたかったため(以下略) 正:メモリ消費でのaspnet_wp.exe再起動を避けたかったため(以下略) よろしくお願いします。 | ||||||||
|
投稿日時: 2006-03-18 21:06
いや、まず、なぜ psqlodbcw(PostgreSQLのODBCコンポーネント)でエラーとなっているか、それが先でしょ。
どこにも aspnet_wp.exe が確保したメモリが大きくなったなんて、書いてないですよね。 あ、CreateResource ?リソースとメモリは別のものです。 おおかた、接続を閉じていないとかじゃないですかね?使う直前で開いて、使い終わったら即閉じる。これが基本です。Try 〜 Finally ブロックを使って、確実に閉じられるようにしましょう。 ご参考 →ASP.NETでInProcを使ってはいけない →COM オブジェクトを解放する COM オブジェクトを DbConnection などに置き換えて考える 〆 written by Jitta@わんくま同盟 on 2006/03/18 □ Microsoft MVP for Visual Developer ASP/ASP.NET October, 2005 - September, 2006 | ||||||||
|
投稿日時: 2006-03-20 08:55
Jittaさん回答ありがとうございます。
NO2のエラーの対象は分かっていたのですが、なにが起因して起こっているのか 分からなかったため協力をお願いした次第です。 ご指示をいただいた部分のチェックを行ってみます。 ありがとうございました。 | ||||||||
|
投稿日時: 2006-03-21 10:10
お世話になります。
結果が出たので報告させていただきます。 ソースをレビューしてみると、オブジェクトの開放(DATASET、ODBC)が不足している ところが多々あったので、すべてDisposeすることで対処しました。 以前よりかなり安定するようになったのですが、それでも上記のエラーが発生しました。 ODBC接続で利用しているのは「PostgreSQL UNICODE」でしたが、「PostgreSQL ANSI」 にしたところ、まったくエラーが発生しなくなりました。 以前は「PostgreSQL UNICODE」で運用していて問題がなかったのですが不思議です。 得られる結果と更新した結果が以前と変わらないためそのまま進めようと思います。 時間があれば調べてみたいと思います。 以上報告でした。 | ||||||||
|
投稿日時: 2006-03-21 12:38
ひょっとしてですが、今回扱うデータの中に UNICODE/MBCS 変換に失敗する文字が含まれているとか? そうすると、かなり把握しにくいところにストレスが溜まっても不思議は無いかもしれません。 | ||||||||
|
投稿日時: 2006-03-21 17:25
渋木宏明(ひどり)さん回答ありがとうございます。
UNICODE/MBCS変換で失敗する文字ということですが、 すみません、ちょっと見当がつきません。(MBCS:マルチバイト文字ですよね?) 現状としては、エラー発生有ソース/エラー発生無ソースどちらも同じデータを 利用しており、どちらもODBCはPostgreSQL UNICODEでした。 エラー発生有ソースについては「ODBCをPostgreSQL UNICODEからPostgreSQL ANSIに 切り替えた」という今までのレスの流れとなります。 明確な回答ができず、申し訳ありません。 よろしければこの部分を教えていただけないでしょうか? >UNICODE/MBCS変換で失敗する文字ということですが、 | ||||||||
|
投稿日時: 2006-03-21 20:46
具体的な文字コードに心当たりがあるわけではありません。 要旨は、char, varchar, text 型などのフィールドに、Unicode ←→ ANSI/MBCS 変換に失敗する文字(コード)が含まれているのではないか?ということです。 ざっくり言っても ・DBMS が媒体への記録に使用する文字コード ・DBMS が送受信に使用する文字コード ・アプリケーションがデータプロバイダとの情報交換に使用する文字コード という具合に、各層の文字コードの体系が異なる可能性があります。 (もっと多段の場合もあるでしょう) 文字コードの体系が異なるのであれば、「変換」という作業が不可避です。 データプロバイダに固有のバグが無いのであれば、
という状況から、どこかの文字コード変換処理で問題が発生しているのではないか、と考えた次第です。 |