misskey icon indicating copy to clipboard operation
misskey copied to clipboard

BullMQにしてからCPU使用率が高くなる、Deliver等のキューのWaitingが増えた

Open tamaina opened this issue 2 years ago • 43 comments

Summary

~~bullmqになってからjobConcurrencyの挙動が変わったらしく、deliverJobConcurrencyは128がデフォルトだとサーバーがハングしてしまうかもしれない~~

~~deliverJobConcurrencyを8とか16あたりにするべき~~

単純にキューの実行をする際にCPUリソースを食いまくるらしい

tamaina avatar Jun 12 '23 15:06 tamaina

syuilo avatar Jun 13 '23 05:06 syuilo

(bullの実装が微妙だったのが治ったとかだと思ってた

tamaina avatar Jun 13 '23 05:06 tamaina

明らかになんかおかしそう

syuilo avatar Jun 13 '23 12:06 syuilo

個人的な感覚ではdeliverJobConcurrencyが128だったのがおかしいと思ってる

tamaina avatar Jun 13 '23 12:06 tamaina

同じジョブでもBullMQにしてから負荷が高くなっていそうな雰囲気がある

syuilo avatar Jun 13 '23 12:06 syuilo

単純に、ジョブ終了から次のジョブを呼び出すまでの時間が短縮されてジョブの実行数が増えたんだと思ってた

(キューメトリクスウィジェットでジョブが実行できた数は増えているように見える)

tamaina avatar Jun 13 '23 12:06 tamaina

image

misskey.io死んだ?

tamaina avatar Jun 13 '23 12:06 tamaina

queueのratelimitの仕様も変わってこっちは結構上方修正してあげないと処理が止まっちゃうかも (deliverJobPerSecinboxJobPerSec などの設定、このlimitの適用範囲が完全にグローバルになってるので)

u1-liquid avatar Jun 13 '23 21:06 u1-liquid

サーバー台数5倍ぐらいに増やしてやっとギリギリ捌けるって感じ 正直このままだと破産するのでなんとかして欲しい

SanMurakami avatar Jun 14 '23 12:06 SanMurakami

deliverJobConcurrencyを減らしてdeliverJobPerSecを増やすとかしてもダメな感じ?

tamaina avatar Jun 14 '23 12:06 tamaina

deliverJobConcurrency減らすと捌ききれなくてどんどん溜まっていく 逆に増やすとCPU使用率がめっちゃ上がってサーバー台数がとんでも無いことになる (通常5/24、現在24/24)

SanMurakami avatar Jun 14 '23 12:06 SanMurakami

(私はbullに戻す以外の選択肢を考えられない

tamaina avatar Jun 14 '23 12:06 tamaina

BullMQのバグ?

syuilo avatar Jun 14 '23 12:06 syuilo

bullmqにした以外にキュー実行周りに手を加えていないならbullmqのせいなのでは

tamaina avatar Jun 14 '23 12:06 tamaina

何か使い方間違ってるとかかも

syuilo avatar Jun 14 '23 12:06 syuilo

まあまずは使い方から疑うべき

tamaina avatar Jun 14 '23 12:06 tamaina

https://github.com/misskey-dev/misskey/blob/develop/packages/backend/src/daemons/QueueStatsService.ts が重い可能性ないかな

syuilo avatar Jun 14 '23 12:06 syuilo

そんなに重たい処理には見えないというか、キュー実行に直接関係あるかしら(tickごとにCPU使用率が増えているわけではなさそうだし)

tamaina avatar Jun 14 '23 13:06 tamaina

まさかこれが重たいとか?

image

tamaina avatar Jun 14 '23 13:06 tamaina

これ結局nodeのシングルプロセス性能の問題と直結してるのでOut-Of-ProcessのWorkerにしたいかも

u1-liquid avatar Jun 14 '23 13:06 u1-liquid

bullの方がなんとかなってるのはどうしてなんだろう

tamaina avatar Jun 14 '23 14:06 tamaina

Workerのパフォーマンスプロファイリング@13.13.2(一つだけの連合先にdeliverするテスト) image この条件ではあまりオーバーヘッドがあるようには見えない 謎

yuriha-chan avatar Jun 14 '23 17:06 yuriha-chan

同時性の問題なのでジョブが一つの場合は起きないかも ratelimitを10とかにして、ジョブを200個くらい用意した状態でconcurrency 5のワーカーを3台位起動させるとたぶんおそらく何が起きてるかは見えるかも…?(未検証)

u1-liquid avatar Jun 14 '23 17:06 u1-liquid

配送元と配送先が同一物理サーバーに乗っている場合での実験ですが

ratelimitを10とかにして、ジョブを200個くらい用意した状態でconcurrency 5のワーカーを3台位起動させるとたぶんおそらく何が起きてるかは見えるかも…?

単純にジョブがゆっくり実行されるという想定された動作になるだけで特にオーバーヘッドが増えたりしている様子はなかった

queueのratelimitの仕様も変わってこっちは結構上方修正してあげないと処理が止まっちゃうかも (deliverJobPerSec と inboxJobPerSec などの設定、このlimitの適用範囲が完全にグローバルになってるので)

その通りで、deliverJobPerSecとinboxJobPerSecをclusterLimit倍すればよさそう

deliverJobConcurrencyはHTTPリクエストの待ち時間やDBの待ち時間に(シングルスレッドのワーカーが)ジョブを最大どれだけ並行して回すかという数なので、極端に減らさなければ特に関係なさそう。(https://docs.bullmq.io/guide/workers/concurrency)

deliverJobPerSecを上げれば500 deliver/コアくらいは捌ける模様(Workerの台数を増やして分散させても、一台あたりの効率はそれほど落ちない)

yuriha-chan avatar Jun 14 '23 19:06 yuriha-chan

Concurrencyの上げ過ぎ→ジョブごとの毎秒のCPU時間が減る→stalledタイマーの更新が間に合わなくなる→ジョブがstalled状態に→ほかのワーカーにより強制的にwaitingリストに入れられる→リスタート の流れが起きてるのではないかとの予想ですが、小規模では再現性がよくないので何とも言えませんね…

u1-liquid avatar Jun 15 '23 00:06 u1-liquid

image

https://docs.bullmq.io/guide/workers/concurrency

https://docs.bullmq.io/guide/workers/sandboxed-processors

こんなことが書いてあったけど…

tamaina avatar Jun 15 '23 01:06 tamaina

アクティビティの受信や配送自体はCPU intensiveではなさそう

syuilo avatar Jun 15 '23 01:06 syuilo

しかし現にCPUがめっちゃ使われている

tamaina avatar Jun 15 '23 01:06 tamaina

動画エンコードとかそういう重い処理は同じプロセスでやると他の全てが止まるからそういう場合はプロセス分離してやってね(=sandbox processor)ってことだと思うからMisskeyおよびこのIssueとは関係なさそう

syuilo avatar Jun 15 '23 01:06 syuilo

しかし現にCPUがめっちゃ使われている

sanbox化したところで軽くなるわけではないからなあ

syuilo avatar Jun 15 '23 01:06 syuilo