システムトラブルのパターン

こんにちは、d99 です。

随分間があいてしまいました。
今回はシステムトラブルにはどんなパターンがあるか、について考えてみたいと思います。

運用段階にあるシステムに発生するトラブルは、その見え方によっていくつか典型的なパターンがあり、その内のいくつかには原因追及の手順がある程度確立されているように思います。まずは(追及手順はひとまず置いておいて)、どんなパターンがあるかを考えつつまとめてみました。

- クラッシュ(crash)

"落ちる" という現象、つまり異常終了してしまうというトラブルです。

Windows オペレーティングシステム自体の異常終了は、ブルースクリーンが該当します。システム自体ではなくアプリケーションが異常終了すると、一般保護違反といったエラーダイアログが出たり、エラー報告しますかと聞かれたり、ワトソン博士がお出ましになったり :-)、開発環境がインストールされていればデバッグするかといったダイアログが表示されたりします。サービスプロセスの場合はダイアログが出せないため、イベントログになんらかのログが残る事(残るように実装されている事)が多いと思います。

アプリケーション自身がうまくハンドリングできなかったとしても、基本的にはシステムがプロセスの異常終了をログオンユーザーに伝えようとします。まれになんの痕跡も残さず終了してしまう事もありますが、それはシステムが用意している異常終了時の処理がなんらの理由で実行できなかったか(できないほど深刻な異常だった、もしくはデバッガなどの介入を防ぐようにアプリケーションが作られていた、など)、異常終了に見えても実際には正常終了だったか、後は電源ケーブルが抜けたか :-) くらいしか考えられません。

- ハング (hang)

"止まる" という現象、応答がなくなるというトラブルです。ハングには2種類あり、それぞれコールドハング(cold hang)とビジーハング(busy hang)と呼ばれます。

コールドハングは、内部でデッドロック(Aの処理がBの処理完了を待っているが、Bの処理もAを待っているといった状態)などが発生し、処理はまったく行っていないが応答を停止している状態です。

これに対してビジーハングは、その名の通り CPU がガンガン回っているだけで応答が返ってこない状態です。無限ループしている事もありますし、他の処理が忙しくて応答を返せないといった状態もあります。

- 例外(exception)もしくは意図しない動作

クラッシュするわけでもなく、ハングするわけでもない、しかし例外が発生したり、意図しない結果となるという場合は "それ以外" に分類してみました :-) 。"トラブル" とは基本的に "意図しない現象の発生" かと思いますのでこういった分類名をつけました。

ここでは3つの分類を挙げてみました。

運用中に突然発生したトラブルにあたる時は、まずはこのどれか、正確には前者二つがどこかで起きていないか、を私は疑います。これは小さなデスクトップアプリケーションでも、何台ものマシンで構成されたクラスタシステムでも同様です。これは前者二つであれば "いつもの手順" が使えるからなのですが、それについてはまた回を改めてまとめてみたいと思います。

d99 でした。