出版情報

SMG HOME > 出版情報 > JAVA PRESS Vol.46 > Java障害対策と問題解決 | Javaにおける障害対応の考え方



Java障害対策と問題解決

結合〜運用時のトラブルにどう対処すべきか

エスエムジー株式会社
岡庭祐 OKANIWA Tasuku
小森裕介KOMORI Yusuke

Java における障害対応の考え方

はじめに

大量のJARファイル Java lib ディレクトリまず、図1を見てください。これは、あるJavaアプリケーションのlibディレクトリ配下の様子ですが、「なぜここまで大量にJARファイルが?」と思わず首を傾げたくなるくらいのJARファイルで溢れ返っています。

この例が端的に表しているように、近年のJavaシステム構築を取り巻く環境は、複雑化の一途を辿っています。自分で意識的に利用しているフレームワークは2〜3種類であったとしても、それぞれのフレームワークは、さらにJakarta関連を筆頭とする各種ライブラリ群を利用しているケースが大半を占めます。

冒頭の例は、Javaアプリケーションが利用しているJARファイルのみを取り上げていますが、システム全体として考えると、さらにWeb/アプリケーションサーバやデータベース、クライアント側のスクリプト技術、そしてサーバ構成やネットワーク、セキュリティなどの複合技術が相互に関連してきます。

こうした技術は、それぞれ役割を持ち、またシステム開発の効率化を目指して利用されているものです。しかし、一度トラブルが発生すると、解決のためには広範囲かつ深い知識と経験が必要とされるケースが多く、予想外に対応に手間取ることがあります。

これからのJavaアプリケーションの開発では、こうした多層に積み重なった技術の各層で発生するさまざまな障害に対して、いかに迅速かつ適切な対応をとれるかが成功の鍵となる、と言えます。

開発工程と発生する障害

近年のEoD(Ease of Development)の流れにより、Javaアプリケーションの開発支援環境は充実し、開発効率は向上してきています。たとえば、テストファースト手法により脚光を浴びている、JUnitなどを用いた単体テストを行えば、クラス/コンポーネントレベルでの問題は、比較的簡単に発見することができます。

開発工程と発生する問題の関係しかし、困難な障害は、各コンポーネント/レイヤを結合した後に、(呼んでもいないのに)やってくるものです。レイヤごと、あるいは機能ごとに担当を割り当てて開発していると、単体では動作するものの、いざ結合という段階で、急に問題が発生するというケースに、皆さんも遭遇したことがあるのではないでしょうか(図2)。

単体テスト時とは異なり、工程が終盤に差し掛かってから発生した問題に対しては、要素技術のスキルだけでは対応できません。目に見えている現象から障害の原因を突き止めていくスキルが求められるため、難易度が格段に高くなります。

そこで今回は、各プロダクトの結合テストや、システム間の総合テスト、および運用開始後に発生した障害対応時に利用できるテクニックを紹介していきます。

まず、プレゼンテーション層やデータベース層など、レイヤごとにありがちな問題とその対応、活用するツールやコマンドについて紹介します。そして、後半では、問題解決時に必要となる思考方法と、実際の事例に基づく解説を紹介します。

  次のページへ

【コンテンツメニュー】

1.Java における障害対応の考え方
2.レベルごとの問題解決 | プレゼンテーション編
3.レイヤごとの問題解決 | データベース編
4.レイヤごとの問題解決 | JavaVM編
5.レイヤごとの問題解決 | OS ・ネットワーク編
6.事例で理解する問題解決の流れ | 基本的な流れをおさえよう
7.事例で理解する問題解決の流れ | 問題解決事例−「突然、システムが停止する!」