マストドンでフォローしまくってたら鯖がパンクした件
僕のアカウント(https://pulpunte-chinpun.xyz/@RTA)は自鯖なのでタイムラインの流速をあげるべく概ね無差別にフォローしているのですが、800フォローを超えたあたりでタイムラインが遅延し始めました。
sidekiqを見たら待機数が15,000を超えていて腰を抜かした事を覚えています。
サーバーを再起動したり待機数を削除しても徐々に遅延していくので、この時点で「サーバーの処理能力がタイムラインの読み込みが間に合ってない」というのが確定しました。
ただ、サーバーを強化するのはお金がかかるしな…と思ったので何か解決方法がないかと模索し、解決方法を見つけたのでここに書き記しておきます。
ちなみに、多分感覚的にはオーバークロックに近いようなもので、正しい対処法は「素直にサーバーを強化する」だと思うので、やるときは自己責任で。
・いじくるよ~
とりあえず、DBがパンクして処理が追いついてないので、/etc/postgresql/15/main/postgresql.conf
にてpostgresqlの接続数を無理矢理上げます。
デフォルトは100なので、とりあえず何も考えず2000と2560MBにしておきました。理由は特にないです。
/etc/postgresql/15/main/postgresql.conf
max_connections = 2000 #100から2000に変更 shared_buffers = 2560MB #128MBから2560MBに変更
続いて、nginx側もいじっていきます。postgresqlの接続数だけ上げてもnginxを上げないと意味ないらしい。
/etc/nginx/nginx.conf
events { worker_connections 92233; # multi_accept on; }
92233にした理由は特にこれもないんですが、cat /proc/sys/fs/file-max
というコマンドを叩いたときに9223372036854775807
という謎の数列が出てきたので、それの上5桁を使いました。
これはサーバーによると思うので、ご自身でコマンドを叩いてみてください。
その後、sudo systemctl restart nginx
で再起動させると徐々に待機数が減少し、最終的には遅延は解消されました。一応これを設定してからさらにフォローを増やし現在1,100フォロー程しておりますが、特に問題なく流れています。
とりあえず突貫工事っぽいけどこれで問題ないなら良いのかなーと思ってます。ほんと無理矢理だけど。
また、viコマンドで保存しようとすると、「権限が無いです」と出る事があると思いますが、その場合はファイルの作成者をlsコマンドとかで確認してください。その後、cdコマンドで階層を移動すればたどり着けるはずです。
この解決方法を生み出した先人に感謝