分サービスが使えない状況があってはいけない近年,私たちは有料無料を問わず,さまざまなサービスを利用できます。外出するときには地図で目的地を確認し,公共交通機関の経路を検索するか,車で通る経路を検索するのではないでしょうか。公共交通機関での移動中には,SNSやゲームをして友人達と交流を深めていることでしょう。仕事でも,会社内で承認を得るための申請サービスなどを使用しているのではないでしょうか。これらのサービスは,たくさんのユーザーからのリクエストを,短時間で返さないといけません。サービスが満足に使えなくなると,一部のユーザーがSNSで拡散し,その結果ニュースに掲載されてサービスのイメージが低下することもあります。サービスのイメージ低下はサービス提供者のビジネスに影響を及ぼすため,あってはなりません。そのため,サービス提供者は問題の発生をできる限り予防し,問題が発生した場合には即時に対応することが必要となります。システムの構成要素がどのように連携しているのかを把握するサービスの多くは,アプリケーション,複数のサーバやネットワーク機器,ハードウェアなどが連携したシステムによって構築されます。問題の発生箇所はこれらの数だけあり,問題の数はこれらの組み合わせの数だけあります。さまざまな問題に対応するためには,システム全体の構成を把握する必要があります。問題に対応するためにすべての組み合わせを確認するのは,作業が膨大になってしまいます。そのため,それぞれの要素がどのように連携しているのかを把握して,対応範囲を絞ります。以降,Webシステムの例で,システムの構成例を紹介します。Webシステムの構成例サーバはハードウェアやOSで構成され,その上で各サーバアプリケーションが実行されます。サーバアプリケーションにはWebサーバ,Javaのアプリケーション,データベースサーバなどがあります。システムは,スイッチやロードバランサーなどのネットワーク機器を使用して,サーバ同士を連携します。ユーザーがサービスを使用してシステムへアクセスすると,各サーバは下記のように連携します。リクエストからレスポンスへの流れそれぞれの処理を1つずつ見ていきましょう。Javaアプリケーションは,受け取ったHTTPリクエストに含まれているURLから実行する処理を決定し,処理を実行します。Webサーバは,JavaアプリケーションからのHTTPレスポンスを受け取り,ユーザーへHTTPレスポンスを返信します情報が不足して,整理できない場合には,誤った結論を導きやすくなるシステム担当者は,システムで問題の発生に備えて,事前にどのような対応をしておくべきなのでしょうか。問題発生時に何をしなければならないのでしょうか。例として,サービスの反応がなくなったケースで見てみましょう。システム担当者はまず,原因を解明するために,発生した事象と現状を把握しなければなりません。事象は「サービスの反応がなくなった」ということなので,Webサーバがリクエストを受け付けてないのか,レスポンスを返していないのかを確認します。現在の状況を確認するため,システム管理者はそれぞれのサーバで取得しているログや,サーバの状況を確認します。情報を確認したところ,以下のことがわかったとします。WebサーバはHTTPリクエストを受け付けていたが,ユーザーへHTTPレスポンスを返してなかったWebサーバのアクセス数はわずかに上昇したものの,アクセスの傾向は普段と比べて違いがないJavaアプリケーションのCPU使用率は非常に高いが,普段のCPU使用率を取得していないため,普段との差は判断できないデータベースサーバへクエリを投げてみても,実行時間は感覚的に問題がなさそうネットワークでは,Webサーバ~Javaアプリケーション間の通信量が普段よりも多くなっていたこれらの情報から原因となりそうな箇所を分析すると,以下の可能性が考えられます。JavaアプリケーションのCPUリソースが不足しているため,リクエストを処理できていないネットワークの帯域が不足しているために,Webサーバへレスポンスが返っていないしかし,情報が不足して,情報が整理できない場合には,誤った結論を導きやすくなります。得られた情報と本当の原因じつは,本事象は,Javaアプリケーションの処理時間よりWebサーバのタイムアウト時間がわずかに短かいことで起こります。WebサーバがJavaアプリケーションからのレスポンスをタイムアウトして,リクエストをリトライすると,Javaアプリケーションは何度も同じ処理を実行するため,CPU使用率が上がります。何度も結果を返したために,ネットワークの負荷も高まります。Webサーバは,Javaアプリケーションからのレスポンスが返ってこないと,ユーザーへレスポンスを返せません。そのため,ユーザーは「サービスが反応しなくなった」と判断してしまうのです。この問題は,Javaアプリケーションの処理を高速化するか,Webサーバのタイムアウトを伸ばすことで解決できます。問題の原因を特定するには,次の3つの条件を守らなくてはいけません。得られた情報が定量的であること普段の状況などと比較できること情報がつながっていることサーバの情報を確認したところで,これらの3つの条件を満たしていないと,原因を解明することは困難です。定量的であるということは,数値で表せるということです。「⁠いつもより遅い気がする」といった感覚で判断してはいけません。比較できるということは,「⁠普段と障害時」「⁠去年の高負荷時と今年の高負荷時」といったように,分析をするために比較対象の情報を持つことです。分析の理由によって,比較の対象となる情報が異なります。つながっているということは,「⁠複数の情報を組み合わせられる」ということです。データベースサーバのSQL実行数が増えたときに,Javaアプリケーションへのリクエストが増えたためにSQLの発行回数が増えたのか,1回あたりのリクエストでのSQLの発行回数が増えたのかがわかりません。SQLの実行数に加え,Javaアプリケーションのアクセスログを組み合わせることではじめて,正確に分析できるようになります。今回の例では,Javaアプリケーションのアクセスログを記録し,レスポンスを返せているかを把握していれば,リクエスト数が増えていることに気づけたでしょう。同じような環境では「前段のWebサーバで情報を取得しているから」という理由で,Javaアプリケーションのアクセスログを取得していないシステムが私の経験上では多いです。Webサーバへのアクセス数とJavaアプリケーションへのアクセス数が等しくならないことを把握している場合には判断を誤ることはありませんが,問題が発生したときに必ずしも有識者がいるとは限らないため,注意が必要です。次回以降も,「⁠問題の発生に備えて,事前にどのような対応をしておくべきなのか」「⁠問題発生時に何をしなければならないのか」という視点から,Javaアプリケーションを運用するためのポイントを紹介していきます。ネットワーク著者プロフィール伊藤智博(いとうちひろ)日本オラクル(株)コンサルタント。Franciscoなどでの講演も行う。得意分野は,Java全般を対象としたトラブルシューティングとパフォーマンスチューニング。最近は,Javaコミュニティへの支援や,Oracle製品とOSSの間を埋めるツールの作成を趣味としている。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。