Javaでなぜ問題が起きるのか 〜システムをきちんと運用するための基礎知識

第2回トラブルに備える

システムの運用ですべき3つのこと

システムの運用担当者が、システムを安定して長期間稼働させるためにすべきことは、大きく3つあります。

図1 問題の種類とライフサイクル
図1 問題の種類とライフサイクル

1. 問題を検知する

図1(a)の期間は、問題が発生しても検知できない期間です。問題が発生していることに気づけず、問題を長い間放置し続けると、ビジネスに多大な影響を与えます。ビジネスへの影響を最小にするためには、問題が発生したら即座に問題を検知する仕組みを作らなければなりません。

2. 問題を解決する

図1の(b)の期間は、問題が検知されてから、解決されるまでの期間です。この期間も、検知するまでの期間と同様、ビジネスに影響を与えます。問題によっては、業務担当者も含めて、運用でカバーすることも検討されます。

検知された問題は、単体ではシステムの稼働に影響を及ぼさないかもしれません。しかしながら、単体では影響を及ぼさないような問題が合わさることで、システムの稼働に影響を及ぼす問題に変化することがあります。そのため、発生した問題を1つ1つ確実に解決することがシステムの安定稼働につながります。

問題の解決には、次の2通りのケースがあります。

  • 問題発生期間の状況から解決できるケース
  • 通常時と問題発生期間のシステムを比較することで問題を見つけ出して解決するケース

3. 問題の発生を防ぐ

図1の(c)の期間は、将来問題が発生するまでの猶予期間です。問題が発生しないように猶予期間の間に対処します 。たとえば、システムのリソースが不足して処理できなくなることを避けるため、運用の履歴からリソースが不足する時期を予測し、その時期までにリソースの追加などの対応をおこなえるよう計画します。

サーバの追加には、サーバの手配や構築作業などが必要となります。運用担当者は、問題が顕在化するよりも前にこれらの作業が完了するように計画します。

問題に対応するための情報を取得する

問題を即時に検知して、問題を短時間で解決し、将来発生する問題を予測するためには、さまざまな情報を取得する必要があります。

たとえば、問題の検知は、以下のようにしておこないます。

  • 事前に上限値や下限値といった閾値を設定し、現在の値がそれらを超えていないかを確認する図2
  • ログファイルからErrorなどのキーワードと一致するログが出力されていないかを確認する
図2 定量的な情報と問題のライフサイクル
図2 定量的な情報と問題のライフサイクル

問題を解決するためには、以下のような作業が必要です。

  • 問題発生期間の情報から、現状を確認する
  • 通常時の情報と問題時の情報を比較することで、問題の原因を切り分ける

問題を予測するには、過去の情報から現在までの情報の推移が必要になります 。

情報には、さまざまな種類があります。たとえば、サーバの処理量に関する情報には、アクセス数、スループットがあります。リソースの情報は、サーバが内部で持っているリソース量、OSやハードウェアのリソース使用量などに分かれ、それぞれ以下のようなものがあります。

  • サーバが内部で持っているリソース量 → データベースコネクション数、スレッド数など
  • OSとハードウェアのリソース使用量 → CPU使用量、HDDやSSDといったストレージデバイスへのI/O量など

Javaアプリケーションではどのような情報を取ればいいのか、詳細については本連載中で紹介します。

取得する情報は多ければ多いほどいろいろな情報をつなげることができて問題発生時に役立ちそうですが、問題が発生した際にはほとんどの情報は役に立たないことが多いです。一方で、アプリケーションでおこなわれる処理と同様、情報を取得する処理もリソースを消費します。多くの情報を、頻繁に情報を取りすぎると、情報を取得するために多くのリソースを使用してしまい、アプリケーションが動くリソースがなくなってしまいます。そのような事態を防ぐためにも、取得する情報を吟味するとともに、情報を取得するためのリソースを用意しましょう。

次回は、Javaアプリケーションの情報をとるにあたり知っておくべきJavaアプリケーションの構成要素を紹介します。

おすすめ記事

記事・ニュース一覧