はじめに

頼まれて立てたマストドンインスタンスのユーザ数が想像してたよりも多く(作業当時2000人ぐらい)、デフォルトの設定だと繋がりにくくなったりしたので対応した内容のまとめです。

インスタンスはさくらのクラウドのスタートアップスクリプト「Mastodon」を使って作成しました。

500エラー対策

混雑時に500エラーが発生してページや画像が表示されない、トゥートやブースト、お気に入りができない、といった現象が発生していました。

nginxのerror_logを見ると

2017/04/24 13:39:48 [crit] 30177#0: accept4() failed (24: Too many open files)

のように Too many open files のエラーが出ていました。

https://blog.be-dama.com/2016/08/31/centos7_nginx_too-many-open-files/

を参考に設定を変更しました。

また、別のエラーで

2017/04/24 21:20:26 [alert] 14304#0: 1024 worker_connections are not enough

というエラーが出ていました。

/etc/nginx/nginx.conf

events {
    worker_connections 2048;
}

1024 => 2048 にしました。

Sidekiqでキューが待機状態であふれる

マストドンではSidekiqを使って非同期処理を実行していますが、混雑時にキューがあふれてしまい、トゥートの反映に時間がかかったりしていました。

/etc/systemd/system/mastodon-sidekiq.service

Environment="DB_POOL=10"
ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -c 10 -q default -q mailers -q pull -q push

DB_POOL と sidekiq のスレッド数を5 => 10にしました。

画像の保存先をS3に変更

サーバーセットアップ時に40GBの容量を選択して、当初の使用率は10%程度だったのですが、あっという間に50%を超えました。

https://hyper-text.org/archives/2017/04/mastodon-instance-with-amazon-s3.shtml

を参考にS3に変更しました。