目指せ! Webアプリケーションエンジニア

第12回 チューニングして安定稼働するシステムに仕上げる

この記事を読むのに必要な時間:およそ 3 分

前回は,アプリケーションのデバッグについて詳しく説明しました。今回はWebアプリケーションがさらに快適な状態で安定稼働するための性能チューニングについて詳しく説明します。

Webアプリケーションのチューニングを考える

前回までで,アプリケーションのデバッグを終えて一通り動作するようになりました。しかし,それだけでは快適なシステムが完成したとは言えないのです。たとえば,たくさんの利用者が一斉に同じアプリケーションを利用したとき,快適な応答性能は得られているでしょうか? 長時間そのアプリケーションを利用し続けた場合,利用時間とともに応答性能が悪くなるような現象は起きていないでしょうか? ハードウェアやネットワークの問題も考えられますが,ソフトウェアの性能チューニングによって改善できる場合も多くあります。

この性能チューニングを行うためには,Webアプリケーションサーバがどのような構造になっていて,その動作原理はどのようになっているのか,その基本を知っておく必要があります。

Webアプリケーションサーバのしくみを復習

今回の連載で取り上げた例題アプリケーションは,サーブレット,JSP,EJBという3つの部分(コンポーネント)に分けて開発しました。この3つのコンポーネントがWebアプリケーションサーバ上でどのように動作するかについて見ていきましょう。

図1で示すように,WebアプリケーションサーバはWebサーバとJava VMを含むJ2EEサーバから構成されています。

図1 Webアプリケーションサーバの構造

図1 Webアプリケーションサーバの構造

ここでWebサーバは,Webアプリケーションサーバの入口としての役割を担い,Webブラウザからのリクエスト受け付けや,処理結果画面をWebブラウザに返す処理を行います。

一方,J2EEサーバはWebサーバから送られてきたリクエストを処理するために,⁠コンテナ」と呼ばれるJ2EEサーバを担う基幹部分で,サーブレット,JSP,EJBを動かします(コンテナはコンポーネントに応じて2つに分かれています)⁠また,必要に応じてリソースアダプタを介してデータベースにアクセスし,処理結果画面を生成します。もちろん複数の利用者が同時にアクセスするため,Webアプリケーションサーバは待ち行列を作り,同時に実行できるリクエストの多重度を制御して,スムーズな運用を実現します。

チューニングはボトルネックを特定することから

チューニングは目標とする性能が出ていない場合,パラメータの調整やボトルネックの調査・解消によって性能向上を図る作業です。

まず模擬的な負荷をかけながら,単位時間あたりのリクエスト処理件数を測定していきます。負荷を増して送信するリクエスト数を増加させても単位時間あたりの処理件数が増加しなくなったり,レスポンスが極端に遅くなったりしたとき,そこにボトルネックがあります。そこでCPU利用率やログなどを調査して,ボトルネックの要因を見つけて取り除き,再度測定を行います。これを目標性能に達するまで繰り返すのです。

ボトルネックが発生したときのシステムの状態と,想定されるボトルネックの要因を表1にまとめました。

表1 システムの状態とボトルネックの想定要因

状態ボトルネックの想定要因確認方法
CPU利用率が100%に迫る重いロジックを繰り返し実行するなど,アプリケーションの構造やコーディングに問題があるリクエストに対する処理を追いかけ,どこで時間がかかっているかを突き止める
同時に実行するリクエストの数が多すぎるシステムが使用するCPUの利用率が通常より高いか確認する
CPU利用率は特に高くないが,レスポンスが遅いフルガーベージコレクション(以下,Full GC)が多発している ※1ガーベージコレクション(GC)ログでFull GCが発生しているか確認する
データベースへの接続に時間がかかっているリクエストに対する処理を追いかけ,どこで時間がかかっているかを突き止める
ログ出力に時間がかかっているリクエストに対する処理を追いかけ,どこで時間がかかっているかを突き止める
シリアライズ処理,排他処理に時間がかかっているリクエストに対する処理を追いかけ,どこで時間がかかっているかを突き止める

※1 CPU1個搭載かつ1コアの場合は,CPU利用率が100%に近くなります。

チューニングを行うためには,ボトルネックの要因を見つけることが必要です。しかし,図1で示すようにWebアプリケーションサーバの構造は複雑であり,リクエストに対する処理のどこで時間がかかっているかを調べることはなかなか困難な作業です。

ガーベージコレクションとは

ガーベージコレクション(以下,GC)とは,Java VMメモリ上の不要になった情報を整理し,利用可能なメモリを確保する処理です。特にFull GCと呼ばれるGCは時間がかかり,実行中は他のすべての処理が停止するため,アプリケーションの性能に大きな影響を与えます。

Cosminexusでは,Full GCを発生させる原因となるオブジェクトを特別な領域で管理し,Full GCの発生を抑止する機能を提供しています。

著者プロフィール

友成文隆(ともなりふみたか)

株式会社日立製作所

http://www.hitachi.co.jp/cosminexus/

コメント

コメントの記入