現場から学ぶWebアプリ開発のトラブルハック 第1回
Webアプリの問題点を「見える化」する7つ道具
NTTデータ 基盤システム事業本部
佐藤聖規
岡本隆史
2007/3/22
本連載は、現場でのエンジニアの経験から得られた、APサーバをベースとしたWebアプリ開発における注意点やノウハウについて解説するハック集である。現在起きているトラブルの解決や、今後の開発の参考として大いに活用していただきたい。(編集部)
| 今回の概要 システムが応答しない、パフォーマンスが劣化したなどのトラブルが発生したときに、原因がなかなか掴めず、あたふたすることはないだろうか? 本稿では、Java EEトラブルシューティングの現場で役立つ7つ道具を紹介する |
ある日、突然電話が鳴る
今回の主な内容 |
用件は、「システムが不定期に停止する。よく分からないけど、どうやらJava EE部分がおかしい」とのこと。このような事態が発生したとき、やみくもに原因を調べ、いつまでたっても問題が解決できず、原因の一片も発見できないことが多々ある。
トラブルが発生した場合、ツールが充実していない昔は、開発者の経験と勘に頼るところが非常に大きかった。Webシステムが普及するいま、昔とは比べ物にならないほど、システムの数が増え、開発者数が増える一方、システム障害を切り分けられる職人的なエンジニアの人数はシステム数に比例して増えているわけではない。そのため、すべてのシステムに問題の切り分けができる開発者を期待するのは難しくなってきている。
しかし、現在提供されているさまざまなツールを駆使すれば職人でなくても、それなりにシステム障害を解析できるようになってきている。
筆者は、弊社の中でもJava EEのトラブルを解決する業務を扱っているが、本稿では筆者が日常利用しているトラブルシューティングの7つ道具と、それらのツールによるパフォーマンスの問題の切り分け方法を紹介する。
筆者自身がこれらのツールを利用しているのは当然として、支援先でこれらのツールを利用して障害の切り分けができる技術者の育成も同時に行っており、それなりの効果を得ている。パフォーマンスの問題に直面した読者がいれば、ぜひ本稿に目を通していただきたい。
どんな順番で問題点を切り分けるべきか?
トラブル発生時、迅速に問題を解決するために重要となるのは問題の「見える化」と「切り分け」である。発生している現象に応じて、ツールの特性を意識しうまく使い分けることが重要である。筆者は順序に従い、トラブルシューティング7つ道具を使い問題を切り分けていく。
筆者がトラブルを切り分けるときの作業と流れを以下の表に示す。
![]() |
| 図1 トラブル切り分けフロー |
トラブル切り分けフロー中の手順と本記事で紹介する7つ道具の対応を以下の表に示す。
| 表1 トラブル切り分けフローの手順と7つ道具の対応 | |
| 手順 | ツール |
| 0:基本データ分析 | HW(ハードウェア)リソースモニタリングツール |
| 0:基本データ分析 | 負荷生成ツール |
| 全体 | Microsoft Office Excel |
| 1:GCログ解析 | GC(Garbage Collection)ログ解析ツール |
| 2:スレッドダンプ解析 | スレッドダンプ解析ツール |
| 3:メソッド/オブジェクトプロファイリング | プロファイラ |
| 4:プールオブジェクト解析 | JMX(Java Management eXtensions)クライアント |
まず、基本となるのは負荷生成ツールとHWリソースモニタリングツールである。負荷生成ツールでシステムへ負荷を掛けながらHWリソースモニタリングツールで、リソース使用状況を調べる。また、取得したデータをExcelによってグラフ化する。その後、各種ツールを利用しながら、問題を切り分けていく。
図1は、これから紹介するツールを利用してボトルネックを切り分けるフローであるが、7つ道具を紹介した後で、あらためてボトルネックの切り分けフローを紹介する。
最初に基本的なデータ測定を行うための、負荷生成ツール、HWリソースモニタリングツール、Microsoft Office Excel(以下、Excel)について解説する。
その1:HWリソースモニタリングツール
HWリソースモニタリングツールとは、CPU使用率やスワップ発生状況などのハードウェアのリソース使用状況をモニタリングするツールである。
UNIX系OSであればtopやsarといったコマンド、Windowsであればタスクマネージャやパフォーマンスカウンタがこれに該当する。
![]() |
| 図2 パフォーマンスカウンタの実行例 (クリックすると画像が拡大します) |
■ 使いどころ
性能劣化やシステムの無応答の問題が発生した場合に、最初に確認するべきなのは、HWリソース使用状況である。トラブルシューティングの基本中の基本であるとともに、オーバーヘッド(システムに与える影響)が小さいため、常時使用する。
■ 分析方法
どのサーバがボトルネックとなっているかを把握することが問題解決への第一歩となる。例えば、APサーバにボトルネックがあれば、APサーバの設定や、アプリケーション自身を見直したり、データベースにボトルネックがあれば、SQLの発行状況をトレースしたりする。JavaEEシステムにおいてボトルネックが発生する可能性が高いのは以下の3つである。
- APサーバ
- DBサーバ
- ネットワーク
どのサーバのどのHWリソースがボトルネックとなっているか把握しておくことで、システム全体から徐々に問題が発生している部位をドリルダウンしていき、問題を解決する。
どのHWリソースがボトルネックとなっているかの判断指標はOSごとに若干異なるが、以下の状態が定常的に発生する場合である。
- CPUボトルネック:CPU使用率85%以上かつ、CPU実行待ちトランザクション数がCPUコア数×2以上
- メモリボトルネック:スワップイン、スワップアウトが同量程度発生している
- ディスクボトルネック:ディスク処理待ちトランザクション数がスピンドル数×2以上
- ネットワークボトルネック:実効帯域を使い果たしている
なお本記事ではAPサーバがボトルネックとなっているときに役立つツールとその分析手段を紹介する。
1/3 |
| Index | |
| 第1回 Webアプリの問題点を「見える化」する7つ道具 | |
| Page1 ある日、突然電話が鳴る どんな順番で問題点を切り分けるべきか? その1:HWリソースモニタリングツール |
|
| Page2 その2:負荷生成ツール その3:Excel その4:GCログ解析ツール その5:スレッドダンプ解析ツール |
|
| Page3 その6:プロファイラ その7:JMXクライアント 迅速にトラブルを解決するには、どうすればよいか? |
|
現場から学ぶWebアプリ開発のトラブルハック バックナンバー
- 第1回 Webアプリの問題点を「見える化」する7つ道具
- 第2回 “Stop the World”を防ぐコンカレントGCとは?
- 第3回 【実録ドキュメント】そのログ本当に必要ですか?
- 第4回 DBアクセスのトラブルは終盤で発覚しがち……
- 第5回 OutOfMemoryエラー発生!? GCがあるのに、なぜ?
- 第6回 【真夏の夜のミステリー】Tomcatを殺したのは誰だ?
- 第7回 【トラブル大捜査線】失われたコネクションを追え!
- 第8回 肥え続けるTomcatと胃を痛めるトラブルハッカー
- 第9回 JavaのGC頻度に惑わされた年末年始の苦いメモリ
- 第10回 ThreadとHashMapに潜む無限回廊は実に面白い?
- 第11回 スレッドダンプの森で覚えた死のロックへの違和感
- 第12回 アプリ開発でも、よ〜く考えよう。キャッシュは大事だよ
- 第13回 DB操作の“壁”を壊すJPAが起こした「赤壁の戦い」
| Java Solution全記事一覧 |
ホワイトペーパー(TechTargetジャパン)
- Webの表示速度を遅くする「SSLハンドシェイク」とは (2010/2/9)
安全性を担保しようとWebページにSSLを適用すると、負荷の高い処理が実行される。速度と安全性は両立できるのか? - クラウド活用「雲活」のために押さえるべき39のポイント (2010/2/2)
活用するべきサービスか否か、クラウドの利点・問題点、クラウドプラットフォーム提供企業になるための条件、開発者がするべきことに分けて紹介 - 再利用性の高いクラス作成に重要な“アクセス制御” (2010/1/28)
Javaのアクセス修飾子public、private、protectedや、Eclipseで簡単に作れるアクセサメソッドgetter、setterについて解説 - DB設計の神ツール「ERMaster」なら、ここまでできる (2010/1/21)
直感的なUIに、カスタマイズ可能な、Excel出力のテーブル定義書、辞書機能など多機能なERモデリングの無料Eclipseプラグインです
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |








