【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷

現場から学ぶWebアプリ開発のトラブルハック 第1回

Webアプリの問題点を「見える化」する7つ道具


NTTデータ 基盤システム事業本部
佐藤聖規
岡本隆史
2007/3/22

本連載は、現場でのエンジニアの経験から得られた、APサーバをベースとしたWebアプリ開発における注意点やノウハウについて解説するハック集である。現在起きているトラブルの解決や、今後の開発の参考として大いに活用していただきたい。(編集部)
今回の概要
システムが応答しない、パフォーマンスが劣化したなどのトラブルが発生したときに、原因がなかなか掴めず、あたふたすることはないだろうか? 本稿では、Java EEトラブルシューティングの現場で役立つ7つ道具を紹介する

 ある日、突然電話が鳴る

今回の主な内容
どんな順番で問題点を切り分けるべきか?
その1:HWリソースモニタリングツール
その2:負荷生成ツール
その3:Excel
その4:GCログ解析ツール
その5:スレッドダンプ解析ツール
その6:プロファイラ
その7:JMXクライアント
迅速にトラブルを解決するには、どうすればよいか?

 用件は、「システムが不定期に停止する。よく分からないけど、どうやらJava EE部分がおかしい」とのこと。このような事態が発生したとき、やみくもに原因を調べ、いつまでたっても問題が解決できず、原因の一片も発見できないことが多々ある。

 トラブルが発生した場合、ツールが充実していない昔は、開発者の経験と勘に頼るところが非常に大きかった。Webシステムが普及するいま、昔とは比べ物にならないほど、システムの数が増え、開発者数が増える一方、システム障害を切り分けられる職人的なエンジニアの人数はシステム数に比例して増えているわけではない。そのため、すべてのシステムに問題の切り分けができる開発者を期待するのは難しくなってきている。

 しかし、現在提供されているさまざまなツールを駆使すれば職人でなくても、それなりにシステム障害を解析できるようになってきている。

 筆者は、弊社の中でもJava EEのトラブルを解決する業務を扱っているが、本稿では筆者が日常利用しているトラブルシューティングの7つ道具と、それらのツールによるパフォーマンスの問題の切り分け方法を紹介する。

 筆者自身がこれらのツールを利用しているのは当然として、支援先でこれらのツールを利用して障害の切り分けができる技術者の育成も同時に行っており、それなりの効果を得ている。パフォーマンスの問題に直面した読者がいれば、ぜひ本稿に目を通していただきたい。

 どんな順番で問題点を切り分けるべきか?

 トラブル発生時、迅速に問題を解決するために重要となるのは問題の「見える化」と「切り分け」である。発生している現象に応じて、ツールの特性を意識しうまく使い分けることが重要である。筆者は順序に従い、トラブルシューティング7つ道具を使い問題を切り分けていく。

 筆者がトラブルを切り分けるときの作業と流れを以下の表に示す。

図1 トラブル切り分けフロー
図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であればtopsarといったコマンド、Windowsであればタスクマネージャパフォーマンスカウンタがこれに該当する。

図2 パフォーマンスカウンタの実行例
図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クライアント
迅速にトラブルを解決するには、どうすればよいか?





Java Solution全記事一覧


ホワイトペーパーTechTargetジャパン

Java Solution フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

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