WAS 小ワザ集: 第16回:Application Anti Pattern(3) 外部リソース利用の繰り返し

「WebSphere Application Server 小ワザ集」では WebSphere Application Serverを導入・構築・運用管理する上で便利な機能やツール、コマンドなどをご紹介します。WebSphere Application Serverをもっと使いやすくするためのヒントとしてご活用ください。

WebSphere事業部, , IBM Japan

WebSphere事業部, IBM Japan



2012年 3月 28日

Anti Pattern

あるお客様が、アプリケーションの挙動を詳細に調査するため、自作のロギングクラスを作成し、アプリケーション内の各所に追加されました。

このロギングクラスは、ログを記録するメソッドが呼ばれるたびに、ファイルをオープンし、ログを書き込み、クローズする、というつくりになっていました。

Result

クライアントからのリクエストが一回行われるたびに、このロギング・メソッドは数回~十数回呼び出されるようになっていました。

ファイルのオープン・クローズという処理はかなり重い処理です。

このため、アプリケーション全体のパフォーマンスがかなり低下してしまいました。特に、ログを記録するメソッドがsynchronized指定されていたため、多くのクライアントからリクエストが集中したときには処理が直列化され、著しいパフォーマンスの劣化を招いてしまいました。

Best Practice

外部のリソース、たとえばファイル、ネットワーク接続、DB接続などを使用する際には、使用前にオープン、使用後にクローズの処理が必要になります。このオープン・クローズの処理は、多くの場合において非常に大きなコストのかかる重い処理です。これらの処理は極力減らすようにコーディングする必要があります。

例えば今回の例では、ファイルはロギングを担当するマネージャークラスがオープンして保持しておき、個々のログの記録が行われるときには直接ログをファイルに書き込むのではなく、マネージャークラスへログの通知を行うような設計にするべきでした。ファイルへの書き出しは、マネージャークラスが一括して、一定時間ごと、あるいは一定回数ごとに非同期的に行うようにしておけば、パフォーマンスの劣化は最小限にすることができます。

また、共有可能な外部リソースについては、プーリングによる再利用をおこなって、リソースのオープン/クローズの回数を減らすことも効果があります。

参考文献

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=WebSphere
ArticleID=806646
ArticleTitle=WAS 小ワザ集: 第16回:Application Anti Pattern(3) 外部リソース利用の繰り返し
publish-date=03282012