クラッシュ (コンピュータ)
クラッシュ(英: Crash)は、英語で「衝突、破壊、墜落」などの意味だが、コンピュータの分野では通常、プログラムが異常終了する事を指す。
異常終了の結果としての「ダウン」(英: Down)を含め、日本語では俗に「落ちた」「死んだ」などとも言う。メインフレームなどでは「ABEND(アベンド、ABnormal ENDの略)」とも言う。「フリーズ」(停止、固まる)を含む意味で使われる事もあるが、本記事では主に異常終了のケースについて記述する。
目次 |
概要 [編集]
クラッシュの引き金になる事象は、特定の入力パターン、異常値の入力、高負荷、長時間の連続稼動など様々なものがあるが、最終的な原因はプログラムのバグである。異常な状況であっても、本来は適切にハンドリングするようにプログラムされなければならない。しかし、あらゆる異常な状況を想定してプログラムを開発するのは困難な事であり、現実にはクラッシュは発生する。
アプリケーションプログラムがクラッシュした場合は、アプリケーションが突然終了してしまい、作業中の保存していなかったデータは失われてしまう事がほとんどである。画面に不自然なウィンドウやアイコンが残ったり、「保護違反」や「例外」等のメッセージを伴う場合もある。
OSがクラッシュした場合は、ブルースクリーンやカーネルパニックが発生したり、あるいは突然リブートがかかる等の現象となる。
クラッシュ時にはこういった目に見える現象のほか、本来解放するべきメモリやリソースが解放されていない、ディスク上の書き込み途中だったデータが不正な状態になっている、などの問題が起きる事もある。
クラッシュに備える技術 [編集]
クラッシュリポート [編集]
クラッシュに至るバグを修正しようとする際、クラッシュ時に何が起きていたかの情報が有用である。しかしクラッシュ発生時はプログラムはすでに終了しているため、プログラム自身が情報を残す事は難しい。そこでクラッシュ時に情報を収集する仕組みをあらかじめ用意しておく例がある。
- Windowsのブルースクリーンは、画面にエラーコードを含む情報を出力する。
- 9.x系に比べNT系は情報量が多い。
- UNIX系OSのコアダンプは、クラッシュ時点のメモリ内容をファイルに書き出す事で、後の解析を可能にする。
- MozillaのBreakpadのように、情報を開発元まで送信できるものもある。
- メインフレームの専用OSでは通常、事前の設定(SLIPなど)に従いコアダンプを出力する。
自動復旧 [編集]
クラッシュは避け得ないものとして、発生した際の被害を抑えたり、自動復旧させるための技術もある。以下はその例である。
- ジャーナリングファイルシステムは、書き込み中のクラッシュによってディスク上のデータが不整合を起こすことを防ぐ。
- 一部のサーバプログラムは、プロセスがダウンした場合に自動的に起動しなおすスクリプトを用意している。
- 高可用クラスターはシステムを多重化して障害に備えるものであるが、ハードウェア障害のみならず、プロセス監視などでソフトウェアのクラッシュにも対応する。
- データベースが備えるロールバック機能は、書き込み中のクラッシュでデータが破壊される事を防止する。
- OSのメモリ保護機能は、あるプロセスのクラッシュが他のプロセスやOS自身に波及することを防ぐ。
運用による緩和 [編集]
根本的な解決ではないものの、運用によってクラッシュの被害を抑えたり発生率を低下させる事も行われている。