ぴゅーもんブログ

カナダ生まれの日本育ち白イルカ(ベルーガ)のぬいぐるみぴゅーもんのブログです、ハワイにもいったよ〜(不定期のんびり更新)

ASP.NETでリソース消費トラブル

先日から、クラインとである操作(帳票印刷)すると、サーバの処理が重くなったり、ひどいときには六インできない状況になるというトラブルが発生していました。どうも、ASP.NETのワーカープロセスの消費メモリ増大していたことに原因がありました。その操作をおこなうと、Oracleへ大量のセッションを消費しに行き、最後はワーカープロセス自身がぶっ飛んでました。そのため、クライアントからの要求に応答が遅かったり、新たなOracleへのワーカープロセス経由での接続が出来なかったりしていたようです。
直接的な原因は、帳票の処理で、独自にOracleへコネクションを生成していたことが発覚しました。明日検証しますが、これが原因であった可能性が大です(初歩的なひどいバグですね)。設計上は、WebAPからのOracleへのアクセスはシングルトンで実装されたコネクション管理クラスからの接続としていたのですが、帳票ツールの利用の仕方の誤りで、この基本設計を犯していた処理が合ったようです。しかも、帳票処理内の繰り返し呼ばれる部分で、そのたびにコネクションを生成していたため、数百ページの印刷をしようとすると、WebApのパフォーマンスチェックのような負荷をかけていたようです。
すぐに、この原因にたどれなかったのは、IISアーキテクチャの理解不足と、設計とおりに実装されているとの思い込みにあったようです。とくに今回は、、ASP.NETのワーカープロセスとアプリケーションプールに関して勉強になりました。(根本の原因のバグとはあまり関係ないけどね。)
[ASP.NET]IIS 6.0でワーカー・プロセスの挙動をカスタマイズするには?
ASP (無料): ASP.NET 講座 IIS 6.0でワーカー・プロセスの挙動をカスタマイズするには?