Laravel Homestead の SSH が 2 分に一度固まる問題
最近プライベートで仕事を頼まれてて Laravel を使っているんですが、この開発用 Vagrant box である Homestead に SSH で接続すると、たまにターミナルの応答がなくなることがありました。
(Windows 上の VirtualBox 4.3.12 での話。Ubuntu 上の VirtualBox では問題は再現しませんでした。)
地味にイラッとする感じなので、とりあえず簡単に回避策を調べてみました。
調査
まずは
php -r '$c = 0; $last = microtime(true); while (1) { $now = microtime(true); printf("%4d: %f\n", $c++, $now - $last); $last = $now; sleep(1); }'
みたいなコマンドを実行して、どれくらいの間隔で発生しているかと、OS 全体が固まってるのか応答がなくなっているだけなのか調べてみました。
応答がなくなっている間も出力は 1 秒間隔に行われるようなので、OS 全体が固まってるわけではなく、SSH の応答がなくなっているだけの模様。また、応答がなくなるのは 120 秒間隔であることがわかりました。
次にサービスを落としていって確認すると、どうも puppet サービスが原因のようで。service puppet start 時にもターミナルが固まる現象が見られたので、strace で動作を見てみると、DNS サーバ(10.0.2.3) に puppet という名前の A レコードと AAAA レコードを問い合わせている間にターミナルが固まっている様子でした。
試しに
dig puppet
とやってみたら、これだけでもターミナルが固まるようですので、Homestead や puppet というよりは VirtualBox の DNS まわりの問題なんでしょうね。
回避策
puppet のこともよくわからないので適切な解決策かはわからないのですが、
sudo service puppet stop
で止めてしまえばターミナルは固まらなくなりました。/etc/hosts で puppet を 127.0.0.1 に向ける等の対策でもよいみたいです。
・・とまあ簡単な対応ですが、気になっていた挙動がなくなってすっきりしました。もっと適切な対応方法がある場合は教えてくださいませ。