- コンピューターやアプリケーションが処理中に応答しなくなりマウス・キーボードの操作を受け付けない状態になること。「フリーズ」「固まる」とも呼ばれる
- ソフトウェアのバグ・メモリ不足・CPU過負荷・デッドロック・無限ループなどさまざまな原因で発生し、ユーザーは強制終了(Windowsではタスクマネージャー・Macではアクティビティモニター)で対処することが多い
- システム開発の観点ではタイムアウト設定・例外処理・デッドロック防止・リソースリークの防止など「ハングアップしにくい設計」が品質の重要な要素だ
【深掘り】これだけ知ってればOK!
ハングアップへの対処法を整理しよう。Windowsの場合:Ctrl+Alt+DeleteでタスクマネージャーやPCの電源を操作する画面を呼び出せる。タスクマネージャーで応答なしのアプリを強制終了する。それでも全体がフリーズしている場合は電源ボタンの長押しで強制シャットダウン。Macの場合:Command+Option+Escでアプリを強制終了できる。アクティビティモニターでプロセスを終了させることもできる。Linuxの場合:Ctrl+Alt+F2でコンソールに切り替えてkillコマンドでプロセスを終了する。
開発者の観点でハングアップを防ぐ設計の原則を理解しよう。タイムアウトの設定:外部APIへのHTTPリクエスト・DBクエリ・ファイルI/Oには必ずタイムアウトを設定する。デフォルトでタイムアウトがない場合に無限待ちになるリスクがある。サーキットブレーカーパターン:依存するサービスが応答しない場合に素早くフォールバックしてシステム全体がハングするのを防ぐ設計パターン。非同期処理:時間のかかる処理を別スレッドやキューで処理してメインスレッドのUIがフリーズするのを防ぐ。
ハングアップとクラッシュの違いを理解しよう。クラッシュ:プロセスが異常終了してプログラムが閉じる。エラーメッセージやスタックトレースが残るため原因を調査しやすい。ハングアップ:プロセスは動いているが応答しない状態で、ログが出ないことも多く原因の特定が難しい。ハングアップした際はJVM(Javaプロセス)であればjstack・Linuxプロセスであればstrace・ptraceでプロセスの状態を調査できる。
よくある誤解
ハングアップは電源を切れば解決すると思っている
強制シャットダウンは最後の手段で、保存されていないデータの損失・ファイルシステムの破損リスクがある。まずタスクマネージャーやkillコマンドで問題のあるプロセスだけを終了してみることが先決だ。また頻繁にハングアップが起きる場合は根本原因(メモリ不足・古いドライバー・ソフトウェアのバグ)を特定して解決することが重要だ。
ハングアップは開発者には防ぎようがないと思っている
タイムアウト設定・デッドロック防止・メモリリーク対策・非同期処理の設計によってハングアップの発生確率を大幅に減らせる。またヘルスチェックとプロセス監視による自動回復の仕組みを入れることで、万が一ハングアップしても迅速に復旧できるシステムを設計することができる。
会話での使われ方

このAPIコール、タイムアウトが設定されていないんですが。依存先のサービスが落ちたら永遠に待ち続けてハングアップしますよ。30秒のタイムアウトを設定してください。
コードレビューでシニアエンジニアがタイムアウト設定の漏れを指摘している場面。




本番サーバーがフリーズしています。Kubernetesのliveness probeに引っかかって自動的にPodが再起動されるまで待ちましょう。次はハングアップの原因特定です。
インフラエンジニアが本番でのハングアップ発生時にKubernetesの自動回復機能が機能していることを確認しながら対応している場面。




PCが固まってしまいました。Ctrl+Alt+Deleteが効かないので電源ボタン長押しで強制終了するしかないですね。次回から自動保存を有効にしておきましょう。
社員がPCのハングアップに対処しながら、データ損失を防ぐための自動保存設定を同僚に勧めている場面。
【まとめ】3つのポイント
- プログラムが応答しなくなる現象で無限ループ・デッドロック・I/O待ちが主原因:ハングアップの原因を理解することで、タイムアウト設定・デッドロック防止・非同期設計という予防的なアプローチで「そもそも止まりにくいシステム」を設計できる
- タイムアウト設定とサーキットブレーカーで無限待ちを防ぐ:外部API・DB・ファイルI/Oへのアクセスには必ずタイムアウトを設定し、依存サービスの障害でシステム全体がハングするのをサーキットブレーカーパターンで防ぐことがWebシステムの安定運用の基本だ
- ヘルスチェックと自動再起動でハングアップからの自動回復を設計する:Kubernetesのliveness probeやsystemdのWatchdogで応答しないプロセスを自動検知して再起動する仕組みを入れることで、ハングアップが発生しても人の介入なしに素早く復旧できる体制を整える
よくある質問
-
QWindowsでアプリがフリーズした場合の対処手順を教えてください。
-
A
まずCtrl+Shift+Escでタスクマネージャーを開いて、応答なしのアプリを選択して「タスクの終了」をクリックします。タスクマネージャーが開かない場合はCtrl+Alt+Deleteから「タスクマネージャー」を選択します。それでも操作できない場合は電源ボタンを長押しして強制シャットダウンします。
-
Qハングアップとクラッシュの違いは何ですか?
-
A
クラッシュはプロセスが異常終了してプログラムが閉じる状態で、エラーメッセージやログが残るため原因特定がしやすいです。ハングアップはプロセスは動いているが応答しない状態で、ログが出ないこともあり原因の特定が難しいです。どちらも不具合ですが対処法と調査方法が異なります。
-
QJavaアプリがハングアップしたときはどうJVM側で調査しますか?
-
A
jstack {PID}コマンドでJavaプロセスのスレッドダンプを取得できます。全スレッドの現在の状態(何を待っているか)が出力されるため、BLOCKED状態のスレッドからデッドロックや無限ループの発生箇所を特定できます。VisualVMというGUIツールも同様の情報を視覚的に確認できます。
-
QWebサービスがハングアップしやすい原因で最も多いものは何ですか?
-
A
外部API・データベースへのリクエストにタイムアウトが設定されていないことが最もよくある原因です。依存するサービスが遅くなったり停止したりした際に全ての接続がハングして、スレッドプールが枯渇してサービス全体が応答しなくなるパターンです。全ての外部通信にタイムアウトを設定することが基本対策です。
この用語と一緒に知っておきたい用語
| 用語 | この記事との関連 |
|---|---|
| タスクマネージャー | タスクマネージャーを押さえると本記事の理解がさらに深まります。Windowsに標準搭載されている、今どのアプリがどれだけCPU・メモリ・ディスクを使っているかをリアルタイムで確認・制御できる管理ツールのこと |
| プログラム | プログラムを押さえると本記事の理解がさらに深まります。コンピュータに何をどの順番でさせるかを書き並べた指示書、それがプログラムだ |
| ループ | 本記事のテーマと実務上セットで使われることが多い用語です。ループっていうのは、同じような処理をコンピュータに何度も繰り返させるための命令の仕組みのことだよ。 |
| アイコン | アイコンを押さえると本記事の理解がさらに深まります。アプリやファイル、操作ボタンなどをひと目でわかる小さな絵で表したもの、それがアイコンだ |
| データ | 本記事のテーマと実務上セットで使われることが多い用語です。コンピュータが処理する数値や文字、画像といった事実や資料そのもの、それがデータだ |
【出典】参考URL
https://kubernetes.io/ja/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/ :Kubernetesのliveness probe設定ガイド
https://docs.oracle.com/javase/8/docs/technotes/tools/windows/jstack.html :jstackコマンドの公式ドキュメント
https://martinfowler.com/bliki/CircuitBreaker.html :Martin FowlerによるサーキットブレーカーパターンのBlog


コメント