バックグラウンドジョブ(Sidekiq)におけるCPU使用時間の分析

Sidekiq のロギングを有効にすると、ENV["DISCOURSE_LOG_SIDEKIQ"] を介して各ジョブに費やされた時間に関する測定値を収集できます。

コンテナを再構築せずに有効にする 1 つの方法は、`/src/config/environments/production.rb` を編集し、どこか早い段階で次のコードを追加することです。
ENV["DISCOURSE_LOG_SIDEKIQ"] = "1"

その後、コンテナを再起動します。

ジョブの仕組みは、測定値を log/sidekiq.logJSON Lines として書き込みます。これは jq を使用して簡単に要約できます。

合計時間の 5% 以上を占めるジョブに費やされた合計時間と平均時間を取得するには、次のようにします。

sudo apt update && apt install jq -y

jq -s '
  group_by(.job_name)
  | map({
      job_name: .[0].job_name,
      count: length,
      total_duration: (map(.duration) | add),
      average_duration: (map(.duration) | add / length)
    })
  | (map(.total_duration) | add) as $grand_total
  | map(. + { percentage: (.total_duration / $grand_total * 100) })
  | map(select(.percentage > 5))
  | sort_by(.total_duration)
' log/sidekiq.log
「いいね!」 3