Rails アプリの開発中、短時間に連続して xhr する処理を書いたら、Rails のプロセスが必ずハングアップして KILL しかできない状態になってしまった。
デバッガで原因を調査したところ、クラスのオートロード時に呼ばれる ActiveSupport::Dependencies::Interlock#loading
のあたりで止まってしまっていることがわかった。
Puma はマルチスレッドでリクエストを処理するため、複数のスレッドがこのロックをとることでデッドロックが発生してしまったものと思われる。
これ以上詳しいことはまだわかっていないが、開発時は RAILS_MAX_THREADS=1
を指定してシングルスレッドで動作させることで、ひとまず問題を回避した。