クラッシュ (コンピュータ)
クラッシュ(英: crash)または異常終了(いじょうしゅうりょう)とは、コンピュータの分野において、アプリケーション(アプリ)やプログラムが、通常とは異なる形で終了することを指す言葉である。クラッシュの英語での本来の意味は「衝突、破壊、墜落」などであるが、本項では主に異常終了のケースについて記述する。
類義語[編集]
異常終了の結果としての「ダウン」(英: Down)を含め、日本語では俗に「落ちた」、「死んだ」、「CTD[注釈 1]」などとも言う。
メインフレームなどでは「ABEND(アベンド、ABnormal ENDの略)」とも言う。「フリーズ」(停止、固まる)を含む意味で使われることもある。
概要[編集]
コンピュータにおけるクラッシュは、特定の入力パターン、異常値の入力、高負荷、長時間の連続稼動など、様々な事象がその引き金となり、アクセス違反、メモリリークなどのバグ[注釈 2]を誘発する。それらの結果、コンピュータを異常な状況におく。
このような状況であっても、本来のコンピュータは、状況を適切にハンドリングするようにプログラムされなければならないが、あらゆる異常な状況を想定してプログラムを開発するのは困難であり、現実にクラッシュが発生するのである。
アプリケーションプログラムがクラッシュした場合は、アプリケーションが突然終了してしまうため、ほとんどのケースで作業中の保存していなかったデータは失われてしまう。また、画面に不自然なウィンドウやアイコンが残ったり、「保護違反」や「例外」などのメッセージを伴うケースもある。
オペレーティングシステムがクラッシュした場合は、ブルースクリーンやカーネルパニックが発生したり、あるいは突然再起動がかかるなどの現象が起こる。
クラッシュ時にはこういった目に見える現象のほか、本来解放するべきメモリやリソースが解放されていない(メモリリーク、リソースリーク (Resource_leak) )、補助記憶装置上の書き込み途中だったデータが不正な状態になっている、などの問題が起きることもある。
なお近代的なマルチタスク・オペレーティングシステムでは、メモリ保護機能によって、アプリケーションプログラムがクラッシュしたとしても他のアプリケーションやOS自体に致命的な悪影響を及ぼすことのないように設計されていることがほとんどである。アプリケーションが使用していたメモリ領域も、たとえクラッシュしたとしても通常はOSによって適切に解放される。
クラッシュに備える技術[編集]
クラッシュリポート[編集]
クラッシュに至るバグを修正しようとする際、クラッシュ時に何が起きていたかの情報が有用である。しかしクラッシュ発生時はプログラムはすでに終了しているため、プログラム自身が情報を残すことは難しい。そこでクラッシュ時に情報を収集する仕組みをあらかじめ用意しておく例がある。この情報は特にデバッガの使えないエンドユーザー環境で発生したクラッシュの原因を特定する、「ポストモーテムデバッグ」(Post-mortem debug/プログラム検死型デバッグ)と呼ばれるデバッグ手法に役立つ。
- Windowsのブルースクリーンは、画面にエラーコード (Error_code) を含む情報を出力する。
- Windowsイベントログには、アプリケーションがクラッシュしたときに、原因となった例外コードやオフセットアドレスといった情報を含むイベントが自動記録されるようになっている。
- Windowsのクラッシュダンプ、UNIX系OSのコアダンプは、クラッシュ時点のメモリ内容をファイルに書き出すことで、後の解析を可能にする。
- MozillaのBreakpadのように、情報を開発元まで送信できるものもある。
- メインフレームの専用OSでは通常、事前の設定(SLIPなど)に従いコアダンプを出力する。
自動復旧[編集]
クラッシュは避け得ないものとして、発生した際の被害を抑えたり、自動復旧させるための技術もある。以下はその例である。
- ジャーナリングファイルシステムは、書き込み中のクラッシュによってディスク上のデータが不整合を起こすことを防ぐ。
- 一部のサーバプログラムは、プロセスがダウンした場合に自動的に起動しなおすスクリプトを用意している。
- 高可用クラスターは、本来システムを多重化して障害に備えるためのものであるが、ハードウェア障害のみならず、プロセス監視などでソフトウェアのクラッシュにも対応する。
- データベースが備えるロールバック機能は、書き込み中のクラッシュでデータが破壊されることを防止する。
- OSのメモリ保護機能は、あるプロセスのクラッシュが他のプロセスやOS自身に波及することを防ぐ。
- Windows Vista以降に搭載されている再起動マネージャーは、同機能に対応しているアプリケーションのクラッシュ後、自動的にアプリケーションを再起動したり、編集中だったファイルの自動保存と復元をサポートしたりすることができる[1]。
運用による緩和[編集]
根本的な解決ではないものの、運用によってクラッシュの被害を抑えたり発生率を低下させることも行われている。
脚注[編集]
注釈[編集]
- ^ 「crash to desktop」の略。主にコンピューターゲーム用語。
- ^ プログラムの設計ミス。