@noellabo のえるさん、ちょっとSidekiqのことでお聞きしたいことがあるんですが。。ダッシュボード画面に出てくる「メモリ使用量」というのは、このサーバーに割り当てられている最大メモリー容量という認識で合ってるんでしょうか?(登録人数が増えるに従って可変で上限が増えているのでよく分からなくて)
Conversation
Notices
-
sakasame@twiddon.com's status on Sunday, 28-Mar-2021 14:10:34 JST sakasame
-
のえる (noellabo@fedibird.com)'s status on Sunday, 28-Mar-2021 14:10:34 JST のえる
@sakasame これかな。たぶんredisの使っているメモリー使用量だね。
Sidekiqは、キューを保持するためのデータベースとして(Mastodonでは)Redisを使っている。
Redisはメモリ上にデータベースを置くので、それがどのぐらいメモリを使っているかを表示してるんじゃないかな。
添付した画像は、すっごく人の少ない私の管理下の某サーバと、Fedibird。どっちがどっちかは説明いらないねw
Fedibirdの場合、MastodonのRuby on Railsがキャッシュに使うRedisデータベースを別に分けているので、たぶんそれは含まれてないと思う。単純にセットアップしたシンプルな構成の場合はひょっとしたら含まれちゃうかも。sidekiq分だけをわけて集計は……どうかな……(ソースコード確認するのサボってます)。Hostdonはどうだろうね。聞いてみないとわからないけど。
ちなみに、Sidekiq自体が使用するメモリとは別ね。あくまで、キュー管理のためのRedisのメモリ使用量。
-
のえる (noellabo@fedibird.com)'s status on Sunday, 28-Mar-2021 14:13:44 JST のえる
@sakasame ちなみにこっちが、Sidekiq全体で使ってるメモリ使用量だと思う。これは、最新のSidekiqの表示で、v3.3.0のHostodonでは表示されない項目だと思う。(アプデが楽しみになるね)
RSS(Resident set size)っていうのがメモリ使用量。6GBぐらいかな。15プロセスがサーバ3台に分散しているので、一つのサーバあたり2GBぐらいだよ。
-
sakasame@twiddon.com's status on Sunday, 28-Mar-2021 14:35:58 JST sakasame
@noellabo なるほど…。
キューを保持するためのデータベースにRedisを使い、そのRedisで保持されたキューの中から、Sidekiqがスケジューラとしてそれぞれのキューをあれやこれやと優先度をつけ振り分けている…、そしてSidekiqはそのRedisから引っ張ってきているので、いまRedisがメモリ上にこれくらい使ってるよ~という状態を表示してくれている…だけどSidekiq自身のメモリ使用量は現在のv3.3.0のHostdonのバージョンでは表示されていないと。…という理解で大丈夫でしょうか?
そして気になったのですが、Fedibirdでも接続(これは連合されているサーバーという認識でいいんでしょうか?)が476というのが…うちは現状接続が1300を越えているので(この数字も多少可変するのでよく分かっていないのですが)
-
のえる (noellabo@fedibird.com)'s status on Sunday, 28-Mar-2021 14:35:58 JST のえる
@sakasame 接続は文字通りredisへのconnection数だと思うんで、連合しているサーバの数はあんまり関係ないです。……なんで1,300もいくんだろうw
これは想像の範囲ですが、HostdonはRedisを複数のサーバで共有していて、この接続はその合算値かもしれませんね。
Redisへは、Web、Sidekiq、Streamingのプロセスが接続しにいきます。スレッドが多いと、その分だけ増えたりするかと思います。
(コネクションプーリングといって、接続数がやたらに増えたり、接続と切断を繰り返したりして非効率にならないように、一定数の接続を確保しておいて使い回す技術があり、一つのプロセスの中では一定以上増えないようになっていたりはします)
-
sakasame@twiddon.com's status on Sunday, 28-Mar-2021 14:50:20 JST sakasame
@noellabo なるほど。。ホスティング側の仕様である可能性の方が大きいんですね…。実際にうちが連合しているサーバーの数は管理画面の既知のサーバーの合算がほぼ一致すると考えていいんでしょうか?
WebとStreamingのプロセスもRedisに接続していたんですね。基本的に積みあがっていく一方のPostgreSQLと比べるとdbとしてはかなり動的?なものなんでしょうか。
-
のえる (noellabo@fedibird.com)'s status on Sunday, 28-Mar-2021 14:50:20 JST のえる
@sakasame Redisには、いつ吹っ飛んでもいいようなデータしか置かないので、動的ですね。ただし、上限いっぱいまで保持するデータがあるので、ある程度は、利用ユーザー数や総フォロー数に比例すると思います。
たとえば、Redisにはユーザーのホームやリストの保持という役割がありまして、status_idのリストをデフォルトで各400件保持しています。ユーザー数に比例するやつです。ただし、しばらくアクセスしていないユーザーのホームは捨てちゃうようになっていて、無駄を省いています。
吹っ飛んだらタイムラインに何も表示されなくなっちゃいますが、そのうち復活しますし、ホームについてはtootctlコマンドに再構築コマンドがあります。
連合しているサーバの数は、APIで取ってくるのが良いです。https://twiddon.com/api/v1/instance
ドメインの一覧をとるときはこっち。長いので注意。https://twiddon.com/api/v1/instance/peers
-
sakasame@twiddon.com's status on Sunday, 28-Mar-2021 15:03:35 JST sakasame
@noellabo リストの保持もRedisでやっていたんですか、それはなんか驚きです。
>しばらくアクセスしていないユーザーのホームは捨てちゃうたまにしかログインしないサーバーにいくと少しの間HTLは準備中です…となるのは捨ててるものを(捨てられたものはPostgreSQLから…?)呼び戻してるからなんでしょうか。
これjsonで書かれて…ますよね?(不安) keyがstatsの{"user_count":56,"status_count":45449,"domain_count":2150}のvalueにあるdomain_count2150が連合しているサーバーの数ということで合ってるでしょうか。status_countは総トゥート数ですか?
(質問ばかりですいません)
-
のえる (noellabo@fedibird.com)'s status on Sunday, 28-Mar-2021 15:03:35 JST のえる
@sakasame そうそう。
だいたいどこのサーバでも叩けばとれるから、いろいろ見てみるといいよ。
これはFedibirdとmastodon.social。
-