さくらのVPS 1G で Mastodon のおひとり鯖を運用してみてるんだけど、まあサーバ起動から1週間も経つとAPI応答がもたつきはじめる。ので、デフォルトからそのままの Sidekiq の設定を見直してみた。
Mastodon の Sidekiq は、初期状態では25スレッドで動く。/etc/systemd/system/mastodon-sidekiq.service を編集することで、スレッド数を変更できる。スレッド数 5 にする場合:
# /etc/systemd/system/mastodon-sidekiq.service # 関係ない行は載せてないよ [Service] Environment="DB_POOL=5" ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -c 5
`DB_POOL` は PostgreSQL のコネクション数らしい。これも一緒に変えてみる。
`systemctl daemon-reload` のあと `service mastodon-sidekiq restart` して完了。
ダッシュボード上の RSS こそあまり変わらないものの、`mastodon-sidekiq.service` を長時間稼働させていると確実にメモリ使用量 → スワップ使用量が増えていくことがわかったので、サービスを1時間おきに再起動させるようにした。
また、`mastodon-web.service` についても VPS のリソースに同様の影響があるのを観測した。とはいえ sidekiq ほど激しくはないし、これを再起動すると10秒程度ぞうさんが出るので、こっちは1日に1回、だいたいいつも寝てる朝方に再起動するようにした。
# /etc/cron.d/mastodon-restart 2 * * * * root service mastodon-sidekiq restart 6 6 * * * root service mastodon-web restart
`mastodon-sidekiq.service` を17時間ほど連続稼働させていたときの kumarin.co のサーバメトリクスを下記に示す。上からメモリとスワップ使用量、ロードアベレージ、ディスクIO。
朝6時ごろにインスタンスを起動し、23時ごろに `mastodon-sidekiq.service` の定期再起動を仕掛けたときのグラフだ。
インスタンス起動後、メモリ使用量グラフの橙線で示されたスワップ使用量が増え続け、それにともないディスクIOとロードアベレージも上昇している。ゴールデンタイムの影響を考慮しても負荷の原因になってると考え、サービスの定期再起動が必要と判断した。