アップグレード後のアイドルプロセス活動の増加

こんにちは、

Discourse を v2.5.0.beta4-399-gbf8085e436 にアップグレードしました(2.4.x から、Postgres 12 へのアップグレードコミットの直前に、discourse_docker の git からコマンドラインでブートストラップを実行)。これにより、サーバー上の CPU 負荷が明らかに増加しています(ユーザーが接続していなくても)。

top コマンドを確認すると、複数の「ruby」プロセスが頻繁にアクティブになっています。これらは Unicorn の Sidekiq ワーカーであると理解しています。redis-cli monitorを実行すると、作業があるかどうかを確認するために、2 秒のタイムアウトを設定したブロック型 BRPOP リクエストが送られていることがわかります。これにより、1 秒間に十数回の Redis コマンドが発生します。また、統計情報が 5 秒ごとに更新されています。redis-cli info statsによると、平均して 1 秒間に 15〜20 のコマンドが処理されています。

この活動が、現在見られる 2〜4% の CPU 使用率に繋がっているかどうかはわかりません。以前のバージョンでは 0.5% 未満でした。当時の redis-cli の統計については確認していません。

タイムアウトを長くすることで改善するかどうか試してみたいのですが、その方法がまだわかりません。

ふむ、これって @eviltrout さんの仕事に関連することですか?

どの作品をお考えですか?私が最近手掛けたもので、これが原因になる可能性は低いと思います。

すいません、ember-cli のことだと思っていました

forum.example.com/sidekiq を確認してください。アップグレード後にバックグラウンドで再処理ジョブが実行されている可能性があります。

Redis に触れた可能性は極めて低いです。以前痛い目に遭ったことがあるので「絶対にない」とは言えませんが、これは別の問題ではないかと推測しています :slight_smile:

面白いヒントですね。そこには危険な兆候は見当たりませんでした。実行中のジョブもなく、実行時間が長いものもありません(100ms をわずかに超えるものが数件あるのみです)。ダッシュボードによると、1 日あたりの処理数は約 1000 で、アップグレード前と同じです。

おそらく本題から外れますが、6 ヶ月間の「Processed」グラフも興味深いですね。2 つのプラトー(一方が他方の 2 倍の高さ)があり、数週間おきに切り替わっているように見えます。これは再起動とは相関していません(その間、この部分の更新も行っていません)。

その 2 秒の BRPOP タイムアウトを変更する簡単な方法はありませんか?コード内では見つけられませんでした。少なくとも、ワークポーリングループが問題かどうかの判断材料にはなるはずです。

以下のような表示が top コマンドで時々見られます:

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                     
   1024 discour+  20   0  333584 202888  21660 S   1.3   2.5   3:35.81 ruby                                                                        
   1156 discour+  20   0  715904 249416  24532 S   1.3   3.1   3:26.50 ruby                                                                        
   1178 discour+  20   0  726664 251468  24564 S   1.3   3.1   3:26.11 ruby                                                                        
   1189 discour+  20   0  714368 247912  24444 S   1.3   3.1   3:24.56 ruby                                                                        
   1200 discour+  20   0  709760 249708  24632 S   1.3   3.1   3:22.96 ruby                                                                        
   1234 discour+  20   0  713344 250288  24636 S   1.3   3.1   3:30.24 ruby                                                                        
   1167 discour+  20   0  712832 247928  24436 S   1.0   3.1   3:24.75 ruby                                                                        
 188658 me        20   0   10424   4240   3576 R   0.7   0.1   0:00.36 top                                                                         
    448 root      20   0 1748444  84900  45884 S   0.3   1.1   6:09.98 dockerd                                                                     

接続しているユーザーはいないのに…

各プロセスの累積 CPU 時間が 3.5 分あるのは、稼働時間が 35 時間であり、ユーザーの活動がほとんどないにもかかわらずです。

また、rbtrace を使ってみましたが、次のようにエラーを返しました:
(pid is not listening for messages, did you require “rbtrace”)
これを修正するためにイメージを再構築する必要がありますか?それとも、コンテナ内で何かを調整したり再構築したりするだけで済みますか?