queue stats が 0 のままなのはパフォーマンス影響の兼ね合いで応急処置入れてるからなのでそのうち部分的に直します(パッチは書いた)

ジョブキューの時間計算量が実行中(待機中ではない)のジョブの数に比例するという性能特性があり、かつ時間計算量がタイムアウトの閾値を超えるとジョブの完了処理がコケるようになり、原理的に2度と状況が改善方向に向かうことはないという性能劣化の正帰還ができあがっていた(ので、全部一度引っこ抜いて待機列に詰め直した)

結論としては詰め直せばええということなのだけれど、そこに至るまでの調査は大変だった。みなさんお疲れさまでした……

具体的にはこの一行の時間計算量が active リスト(実行中のジョブリスト)の要素数に比例してます。完了したジョブをリストから取り除く処理なんだけれど、増えた待機ジョブに対応してワーカーを増やしまくるなどして実行中のジョブがひとたび急増すると、ここの処理が激重になり、タイムアウトするようになり、つまりジョブは2度と完了せず、不幸が訪れる。ジョブに増加に対応しようとして逆に首が締まる最悪のループに入るわけです。
https://github.com/taskforcesh/bullmq/blob/0a70f4cf7ba21c18c55390d47069335c305559af/src/commands/moveToFinished-14.lua#L117

フォロー

このところ発生した、misskey.ioの外部配送が遅延していた原因など、時系列で技術面の詳しいことが報告されてるよ。
misskeyhq.fanbox.cc/posts/7266

あわせてKOBA789さんの投稿もみとくといいかも。 [参照]

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。