クラッシュ (コンピュータ)

出典: フリー百科事典『ウィキペディア(Wikipedia)』

クラッシュ: crash)または異常終了(いじょうしゅうりょう)とは、コンピュータの分野において、アプリケーション(アプリ)プログラムが、通常とは異なる形で終了することを指す言葉である。クラッシュの英語での本来の意味は「衝突破壊墜落」などであるが、本項では主に異常終了のケースについて記述する。

類義語[編集]

異常終了の結果としての「ダウン」(: Down)を含め、日本語では俗に「落ちた」、「死んだ」、「CTD[注釈 1]」などとも言う。

メインフレームなどでは「ABEND(アベンド、ABnormal ENDの略)」とも言う。「フリーズ」(停止、固まる)を含む意味で使われることもある。

概要[編集]

コンピュータにおけるクラッシュは、特定の入力パターン、異常値の入力、高負荷、長時間の連続稼動など、様々な事象がその引き金となり、アクセス違反メモリリークなどのバグ[注釈 2]を誘発する。それらの結果、コンピュータを異常な状況におく。

このような状況であっても、本来のコンピュータは、状況を適切にハンドリングするようにプログラムされなければならないが、あらゆる異常な状況を想定してプログラムを開発するのは困難であり、現実にクラッシュが発生するのである。

アプリケーションプログラムがクラッシュした場合は、アプリケーションが突然終了してしまうため、ほとんどのケースで作業中の保存していなかったデータは失われてしまう。また、画面に不自然なウィンドウやアイコンが残ったり、「保護違反」や「例外」などのメッセージを伴うケースもある。

オペレーティングシステムがクラッシュした場合は、ブルースクリーンカーネルパニックが発生したり、あるいは突然再起動がかかるなどの現象が起こる。

クラッシュ時にはこういった目に見える現象のほか、本来解放するべきメモリやリソースが解放されていない(メモリリークリソースリーク (Resource_leak)、補助記憶装置上の書き込み途中だったデータが不正な状態になっている、などの問題が起きることもある。

なお近代的なマルチタスクオペレーティングシステムでは、メモリ保護機能によって、アプリケーションプログラムがクラッシュしたとしても他のアプリケーションやOS自体に致命的な悪影響を及ぼすことのないように設計されていることがほとんどである。アプリケーションが使用していたメモリ領域も、たとえクラッシュしたとしても通常はOSによって適切に解放される。

クラッシュに備える技術[編集]

クラッシュリポート[編集]

クラッシュに至るバグを修正しようとする際、クラッシュ時に何が起きていたかの情報が有用である。しかしクラッシュ発生時はプログラムはすでに終了しているため、プログラム自身が情報を残すことは難しい。そこでクラッシュ時に情報を収集する仕組みをあらかじめ用意しておく例がある。この情報は特にデバッガの使えないエンドユーザー環境で発生したクラッシュの原因を特定する、「ポストモーテムデバッグ」(Post-mortem debug/プログラム検死型デバッグ)と呼ばれるデバッグ手法に役立つ。

自動復旧[編集]

クラッシュは避け得ないものとして、発生した際の被害を抑えたり、自動復旧させるための技術もある。以下はその例である。

  • ジャーナリングファイルシステムは、書き込み中のクラッシュによってディスク上のデータが不整合を起こすことを防ぐ。
  • 一部のサーバプログラムは、プロセスがダウンした場合に自動的に起動しなおすスクリプトを用意している。
  • 高可用クラスターは、本来システムを多重化して障害に備えるためのものであるが、ハードウェア障害のみならず、プロセス監視などでソフトウェアのクラッシュにも対応する。
  • データベースが備えるロールバック機能は、書き込み中のクラッシュでデータが破壊されることを防止する。
  • OSメモリ保護機能は、あるプロセスのクラッシュが他のプロセスやOS自身に波及することを防ぐ。
  • Windows Vista以降に搭載されている再起動マネージャーは、同機能に対応しているアプリケーションのクラッシュ後、自動的にアプリケーションを再起動したり、編集中だったファイルの自動保存と復元をサポートしたりすることができる[1]

運用による緩和[編集]

根本的な解決ではないものの、運用によってクラッシュの被害を抑えたり発生率を低下させることも行われている。

  • 連続稼動するサーバでは、定期リブートが効果的な場合がある。
  • 作業中のデータをこまめにセーブするのも、個人でできる対策の一つである。

脚注[編集]

注釈[編集]

  1. ^ 「crash to desktop」の略。主にコンピューターゲーム用語。
  2. ^ プログラムの設計ミス。

出典[編集]

関連項目[編集]