しょうもないことで時間を使いたくないのです。
ローカル内の話とします。またプロセスを調べたり Wreshark を使ったりといったガチな話はしません。
Verbose
本当にブロッキングしているかどうかをまずは見てください。たとえばログなどの表示レベルを上げてみると、同じ処理がぐるぐる回っていたりすることがあります(無限ループ)。
ビジー
CPU やメモリを使いすぎると重くなります。
空き容量不足
ディスク不足でも重くなります。
プロンプト
たとえば yum install をすると [y/N]
を聞かれますが、IaC やスクリプトでこれを組み込んじゃうと永遠に終わりません。
他にもプロンプトを出す処理が入っている場合、そこでブロッキングします。
タイムアウトとリトライ
応急処置的ですが、これらを短くすればトライアンドエラーしやすくなります。これらの設定が効かない場合も多いので、あまり鵜呑みにしないようにします。
リトライについては、自動リトライが無駄に賢く働いて永遠に試していることがあります。
プロキシ
プロキシ設定をミスると通信が途中で届かず、(出来が良くない場合は)ブロッキングしがちです。
プロキシ設定がどこから読み込まれるかが違うのでハマりがちです。
- 環境変数 https_proxy
- 別の環境変数(何とかOPTなど)
- .dotfile 的な設定ファイル
- カレントディレクトリにある分?
- ホームディレクトリに保存されてる分?
- もっとシステム寄りの場所?
- コマンドラインオプション
- etc
また、これらの読み込みが多段になっていることもあります。どこの設定が読み込まれているかを特定してください。
ファイアウォール
どんな設定したかなんて覚えてないことが多いので、一度は確認しておいた方が無難です。
セキュリティソフト
基本的にお使いのセキュリティソフトが何をしているかは、すべて把握した方が良いです。
処理対象がでかすぎるか指数関数的
100 MB で 20 秒かかる処理も、10 GB だと 2000 秒(=33分)かかります。
アルゴリズムなどの事情で指数的なオーダーの場合は、非現実的な時間になっている可能性があります。
デッドロック
見かけないようで、意外とあります。AがBを待っていて、BがAを待っているという膠着状態です。