-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
BullMQにしてからCPU使用率が高くなる、Deliver等のキューのWaitingが増えた #11000
Comments
謎 |
(bullの実装が微妙だったのが治ったとかだと思ってた |
明らかになんかおかしそう |
個人的な感覚ではdeliverJobConcurrencyが128だったのがおかしいと思ってる |
同じジョブでもBullMQにしてから負荷が高くなっていそうな雰囲気がある |
単純に、ジョブ終了から次のジョブを呼び出すまでの時間が短縮されてジョブの実行数が増えたんだと思ってた (キューメトリクスウィジェットでジョブが実行できた数は増えているように見える) |
queueのratelimitの仕様も変わってこっちは結構上方修正してあげないと処理が止まっちゃうかも |
サーバー台数5倍ぐらいに増やしてやっとギリギリ捌けるって感じ |
deliverJobConcurrencyを減らしてdeliverJobPerSecを増やすとかしてもダメな感じ? |
deliverJobConcurrency減らすと捌ききれなくてどんどん溜まっていく |
(私はbullに戻す以外の選択肢を考えられない |
BullMQのバグ? |
bullmqにした以外にキュー実行周りに手を加えていないならbullmqのせいなのでは |
何か使い方間違ってるとかかも |
まあまずは使い方から疑うべき |
そんなに重たい処理には見えないというか、キュー実行に直接関係あるかしら(tickごとにCPU使用率が増えているわけではなさそうだし) |
これ結局nodeのシングルプロセス性能の問題と直結してるのでOut-Of-ProcessのWorkerにしたいかも |
bullの方がなんとかなってるのはどうしてなんだろう |
アクティビティの受信や配送自体はCPU intensiveではなさそう |
しかし現にCPUがめっちゃ使われている |
動画エンコードとかそういう重い処理は同じプロセスでやると他の全てが止まるからそういう場合はプロセス分離してやってね(=sandbox processor)ってことだと思うからMisskeyおよびこのIssueとは関係なさそう |
sanbox化したところで軽くなるわけではないからなあ |
むしろ大量にプロセス生成されてより重くなりそう |
なんか無駄に抵抗してるけどとりあえず改造してみようと思ったが、Nestから剥がすのが面倒だったので断念した (そして他のモジュールを芋蔓式に引っ張ってくる必要があるため分離したプロセスはとてもデカくなりそう) |
確かに動画エンコードとかそういうワークでしか使えない |
https://docs.bullmq.io/guide/nestjs |
https://docs.nestjs.com/techniques/queues 解説としてはこっちの方がわかりやすそう |
署名処理がCPU intensiveっぽいけど、すでにClusterで並行処理化できているからそれ以上の対策をする意味はなさそう(Workerの代わりにネイティブスレッドを使うようにすればメモリ使用量は削減できる可能性があるが、CPUの負荷軽減は微妙) |
解決した方に報奨金を進呈 |
BullMQがどう影響しているかはよく分からないが、プロファイラ上では署名処理が重い。 参考までに各アルゴリズムのOpenSSLによる速度測定例を置いておきます。
|
getFetchInstanceMetadataLockとは関係ないけど、Redisとの通信と聞くとthis.deliverQueue.addBulkで一斉にDeliver Queueを突っ込めないかなと思った |
ジョブキューの独自改造はわりとありだと思う |
鍵の変更は別Issueにしますね。 |
再起動時と比べinboxのProcessどんどん少なくなっていく気がするのだがうちだけか |
Active (concurrency)を増やすと逆にダメらしい |
最初に書いた↑の挙動はBullMQの時間計算量増加が原因かしらね |
Summary
bullmqになってからjobConcurrencyの挙動が変わったらしく、deliverJobConcurrencyは128がデフォルトだとサーバーがハングしてしまうかもしれないdeliverJobConcurrencyを8とか16あたりにするべき単純にキューの実行をする際にCPUリソースを食いまくるらしい
The text was updated successfully, but these errors were encountered: