スタックしているか、または遅い Ruby プログラムのデバッグ
最終更新日 2023年03月20日(月)
Ruby プログラムがクラッシュはしていないが、いつまでもハングアップしたり非常に遅くなったりすると、デバッグが困難になる場合があります。プログラムがハングアップしたり遅くなったりしている場所を確認するために、サンプリングプロファイラを追加します。
どの Ruby アプリケーションにも大まかなサンプリングプロファイラを追加できます。スレッドをバックグラウンドで起動し、実行中のすべてのスレッドのバックトレースを報告します。たとえば、アプリケーションがデプロイ中にハングアップする場合は、次のコードを config/initializers/sampling_profiler.rb
内のイニシャライザに追加します。
Thread.new do
loop do
sleep 10 # seconds
puts "=" * 80;
Thread.list.each.with_index { |t, i| puts "== Thread #{i}"; puts t.backtrace }
end
end
この例では、実行中のすべてのコードの場所が 10 秒ごとに出力されます。この場所により、プログラムがハングアップしたり遅くなったりしている場所のヒントが提供されます。
そのコードを分離した後、デバッグステートメントを追加するか、またはこの問題を直接修正してみることができます。