View categories

Categories

最終更新日 2024年12月02日(月)

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 秒ごとに出力されます。この場所により、プログラムがハングアップしたり遅くなったりしている場所のヒントが提供されます。

そのコードを分離した後、デバッグステートメントを追加するか、またはこの問題を直接修正してみることができます。