他サーバーとの通信による負荷
自鯖に問題がない場合でも、他鯖と連合し、通信することで、負荷がかかることがあります。
通信による負荷が多そうな場合は、連合を一時的にでも制限することで、自鯖にかかる負荷を減らすことができます。
Mastodon,kmyblueの場合
Sidekiq(サイドキック)を確認することで、負荷具合を確認することができます。
https://github.com/sidekiq/sidekiq
Sidekiq(サイドキック)は、様々な処理を並行して片づけるのを手伝ってくれる仕組みのようです。しかも、数回の失敗は後から再試行してくれます。
管理画面には、ユーザー設定のメニューの下の方から行けます。別画面で開かれます。
大雑把に、以下のように理解すると良いでしょう。
-
完了:終わった仕事
-
失敗:失敗した仕事
-
実行中:今やっている途中の仕事
-
待機状態:詰まっている仕事
-
再試行:やり直し予定の仕事
-
予定:そのうちやる予定の仕事
-
デッド:やり直ししまくったけどどうにもこうにもならず、お手上げになった仕事
上記のうち、実行中~予定までの数値、特に待機状態の数値がやたら高いと、負荷がかかっている状態です。
仕事が上手くいかずにやり直した、もしくはお手上げになった場合などは、エラー項目に通信先も記されます。この通信先が偏っていたら、多くエラーを出しているサーバーに何かがあったのかもしれないと判断します。
なお、満遍なく待機状態の数が増えている時は、自鯖の方が(ホスティングサービスなど含めて)一時的に落ちていた可能性があります。
待機状態が多いとタイムラインがうまく更新されない場合があります。待機状態の数がなくなるまでは一旦鯖を放置して、他のことをする機会です。
再試行が増えている時は連合先のサーバーが落ちていることがあるので、一時的に問題のサーバーへの配送を管理画面から止めると良いでしょう。
予定にはアンケートや時限ミュートなどが積まれるため、その数が多いと予定が増えることがあります。
デッドは連合先のサーバーが死んでいるなどで再試行回数の上限に引っかかった際に送られる場所です。なので、連合先のサーバーが復活した後にデッドからジョブを実行させることもできます。
サーバーが重いときは、Sidekiqが使っているメモリが増大している場合もあるようです。(Sidekiq自体は時間経過とともにメモリを使います)
ホスティングサービスの管理画面から再起動できる時は、再起動をかけるとサーバーが軽くなることがあります。
Misskeyの場合
コントロールパネルのジョブキューが綺麗に流れていれば良いのですが、連合が上手くいかなくなるとジョブキューにDelayed,Waitingが溜まってきます。
Inboxは自分の鯖に届いている情報を、Deliverは自分の鯖から配送している情報を取り扱っています。
また、Errored instancesという項目があり、どこのサーバーとの連合が詰まっているかも確認できます。コントロールパネルの連合という項目では今まで関わったことのあるサーバーが一覧になっていますので、そこから任意のサーバーについて一時的に連合を制限したり再開させたりしてジョブキューをさばくことがあります。
Misskeyでは、主に以下の場合に通信制限を検討すると良い、とのことです。
-
ジョブキューのDelayedが100以上
-
CPU負荷が連続30秒以上50%以上
-
メモリー使用率が連続1時間以上95%以上
なお、ジョブキュー、CPU負荷、メモリー(RAM)使用率全て、ウィジェット欄(PCブラウザのデフォルトでいう右側の欄、スマホの場合は右から2番目、投稿ボタンの左側にあるボタンで表示されるカラム)に表示させることができます。
少なくともCPU負荷、メモリー(RAM)使用量についてはコントロールパネルの設定(その他)にてサーバーのマシン情報を公開しておく(場合によってはサーバーの再起動で有効化される)必要がありますが、有効化されていれば、サーバーメトリクスというウィジェットにて確認可能です。
メディアファイルによる負荷
主には自鯖内でアップロードされたファイル(ローカルメディアファイル)と、連合することによって他鯖から流れてきたファイル(リモートメディアファイル)に分類されます。
Mastodon,kmyblueの場合
Hostdonを利用している場合は、ローカルメディアにさえ気を付けていれば大丈夫です。リモートメディアについては無制限だと、サービス案内にも明記されています。
ローカルメディアについては、個々人がメディアの添付された投稿を削除すると、添付されていたメディアも削除されます。
一方で、自力で自鯖を建てた場合、サーバーやオブジェクトストレージの容量を節約するために、タイムラインに表示するために取り込まれたリモートメディアを一旦自鯖から削除するコマンドもあります。このコマンドはVPSから叩くことになります。
一応、管理画面でコンテンツの保持の設定をすることで一定、自動で削除させることもできますが、例えばオブジェクトストレージの無料枠の中でやりくりしたい、思ったほどメディア使用量が減らない、などの場合はコマンドでメディアの内訳を確認してみたり、手動で削除してみると良いでしょう。
VPSでコマンドを叩くには、最初に、コマンドの叩ける場所まで移動します。
sudo su - mastodon
cd live
メディア量確認(どのファイルが容量を食っているのか算出)
RAILS_ENV=production bundle exec bin/tootctl media usage
以下の表記について、下のコマンドでlocal以外のメディアを掃除することができます。
-
Attachments: リモートメディア
-
Preview cards: プレビューカード
-
Avatars, Headers:アバターとかヘッダーとか
Custom emojiについては、リモートのカスタム絵文字を消去するコマンドもありますが、再度送ってもらわないと絵文字が表示されなくなりますし、kmyblueの場合はリアクションの表示も消えますので、筆者的にはあまりオススメしません。
どうしても必要な場合は、公式ドキュメントから該当のコマンドを探してください。
リモートメディアを削除
RAILS_ENV=production bundle exec bin/tootctl media remove --days=0
プレビューカードを削除
RAILS_ENV=production bundle exec bin/tootctl preview_cards remove --days=0
アバターとかヘッダーとか削除
RAILS_ENV=production bundle exec bin/tootctl media remove --days 3 --prune-profiles
孤立メディア削除
RAILS_ENV=production bundle exec bin/tootctl media remove-orphans
各コマンドの days の後ろで定義している日数に関しては、自分の持つ余裕に応じて適宜調整してください。
Misskeyの場合
コントロールパネルの中の設定(全般)に『リモートのファイルをキャッシュする』かどうかを選べる箇所があります。表示速度が気にならず、容量を節約したい場合は、ファイルをキャッシュしないのが良いです。
もしもリモートメディアをキャッシュしている場合、コントロールパネルの管理(ファイル)にて自鯖で表示している画像の一覧が確認できますが、右上部分にゴミ箱のマークがあり、そこでキャッシュをクリアすることができます。
上記以外に空き容量を確保する方法
apt にてアップデートした諸々の旧バージョンが残っていることがあります。
sudo apt autoremove
アップデート後にこの文字列が見えたら、実行しても良いかもしれません。
Mastodon,kmyblueで更に容量の圧迫を気にする場合
もしも /home/mastodon/.yarn や /home/mastodon/.rbenv が大きい場合は、 yarn cache clean で .yarn を削ることができます。また、 rbenv versions にて、どのRubyのバージョンを抱えているかを確認し、利用していないバージョンのRubyを rbenv uninstall (バージョンの数字) で削除することもできます。