上昇し続ける Ruby プロセスをデバッグするにはどうすればよいでしょうか?

上昇し続ける Ruby プロセスをデバッグするにはどうすればよいでしょうか?

数日前、4 台のアプリケーション サーバーすべてで問題が発生し始めました。これは、いくつかのコードをデプロイした後に発生しましたが、IP アドレスを保存するローカル データベース ファイルを更新しただけで、実際のコード変更は行っていません。ちょうどその頃、Ruby プロセスが手に負えなくなっていたようです。しばらくは問題ありませんが、突然、1 つの CPU で CPU 使用率が 100% にまで急上昇します。passenger を使用しているため、最終的には別のスレッドが同じことを実行し、別の CPU を最大限まで使用し、Web サーバーがトラフィックを処理できなくなり、応答しなくなるまで続きます。

私はかなり調査しましたが (得意ではないのですが)、少なくとも、プロセスに対して strace を実行すると、最初はかなり正常に見えますが、上記のように異常が発生すると、呼び出しが止まらなくなることがわかりましたclock_gettime(CLOCK_REALTIME, {1518938625, 9566131}) = 0。通常のプロセスは、私が言ったように、常に何かを吐き出しているわけではなく、たとえば Web リクエストが届いたときだけ発生しますが、その後何かがトリガーされ、プロセスを強制終了するか、パッセンジャーを再起動するか、サーバーを再起動するまで異常が発生します。その後、1、2 時間以内に再び問題が発生します。

数日間、ベビーシッターをしたり、ノンストップで再起動したりしてなんとか動いているのですが、何かアイデアがほしいです。2013 年ごろの非常に古い投稿が 2 つあり、clock_gettime に関する 100% CPU 問題が取り上げられているのに気づきました。そこで、私が見た数件の投稿に関連する提案を 2 つとも試してみました。1 つは TZ 変数を設定するもので、もう 1 つは何らかのうるう秒のバグを修正するものです。提案された修正のどちらの理由も理解できませんが、残念ながらうまくいきませんでした。

私は以下のスタックを実行しています: ruby​​ 2.2.0 Passenger スタンドアロン: Gem バージョン: 4.0.58 (1 つのサーバーで 5.2.0 にアップグレードしてみましたが、動作に変化はありませんでした) MySQL CentOS 6.9

関連情報