ワイヤード・パンチ

サイトレイアウトを変えてみました。よろしければアンケートにご協力ください。

マストドンの動作が遅い原因はメモリ不足?

いろいろあってTwitterをやめたあと、マストドンに移住しました。

そして、サーバがあれば自分のインスタンスを建てられるので、他のインスタンスと併用しつつも、自分専用のインスタンスでも活動しています。

しかし、他のインスタンスと比べると、やたらと接続速度が遅く、実用に耐えうるものではなかったので、原因を探りました。

広告

サーバが圧倒的にメモリ不足だった。

試しに個人インスタンスを建ててみた人たちの間で多かった意見としては、サーバのメモリは2GB欲しいということ。

ぼくが使っていたサーバは、Conohaの1GBプランのVPSなのですが、その名のとおりメモリが1GBとなっています。

メモリの消費量がどれだけあるのは、これまで全く調べたことがなかったので、調べてみることに。

まず、teratermを開いてssh接続でサーバと接続します。

このサーバにはCentOS7が入っているので、「free」というコマンドを入れることで、現在のメモリの状況を確認することができます。

(最初の写真は当時の状況と違うものなのでややこしいのですが、)実際にコマンドを入れて、実行結果のfreeの欄から空きメモリを確認してみます。

すると、実メモリ1GBに対して空きがほとんどなく、ストレージの方でメモリを肩代わりする領域である、スワップもほぼ空きがない状態でした。

ただでさえメモリがいっぱいっぱいなのに、メモリより効果の薄いスワップもいっぱいでは、どおりでまともに動かないはずです。

なお、マストドンをいったん停止させると、メモリの使用量が大きく下がりました。

マストドンはただ動作させているだけで、非常にメモリの消費量が大きいようです。

mackerelでメモリの状況を視覚的に監視してみる。

先程のfreeコマンドでは、実行した瞬間の状況しか確認できません。

これだと、常に同じ状況なのか、たまたま使用量が高くなったのか低くなったのかもわかりません。

そこで、mackerelというツールをインストールし、ブラウザからグラフで状況を確認することにしました。

会員登録は必要になりますが、そのときにインストール方法も合わせて説明されるので、ここでは特にインストール手順は解説しません。

いざ導入を終えて、サーバのメモリの状況を監視させてみます。

上の写真は、mackerelをインストールしてから、二日後にサーバをいったん停止するまでに記録したものです。

実メモリは1GB、スワップも1GBで、合わせて2GB。

実メモリは常に満タンまで消費されている状態で、折れ線で示されるスワップは、激しく変動していることがわかります。

場合によってはスワップも満タンになりそうで、これで快適な動作を望めるはずがありません。

もはや1GBではまともに運用できないことがわかりました。

月額料金は高くなってしまうものの、いったんサーバを停止し、2GBプランに切り替えたあと、もう一度サーバを起動して監視しました。

そしてその結果が上の写真。どうやら実メモリが2GBでもいっぱいいっぱいになってしまうようですが、一方でスワップの消費量は大きく下がりました

ただ、数値で見ても速さはわかりません。実際にマストドンに接続してみたところ、以前までは表示まで数十秒かかることもざらだったのに対して、今は一瞬。

メモリを上げたことで、ようやく快適にマストドンを使えるようになりました

なお、同じサーバで本ブログ(wordpress)とowncloudも動作させているので、それも影響していたかもしれませんが、やはり一番処理が重いのはマストドンでしょう。

というわけで、これから自分でマストドンのインスタンスを建ててみたいという方は、メモリは最低2GBは用意した方がいいでしょう。

余談。

メモリを変えてから現在に至るまで、全く動作が詰まることなく、快適に動いています。

他のインスタンスといえばkirakiratterによく居座るのですが、そちらよりも動作が快適です。

(他のインスタンスはユーザが多数居るので、差が出るのも仕方ないと思いますが…。)

ただ、先程のメモリ増設後の写真を見てみると、時間が経つにつれてスワップのグラフが徐々に伸びていっており、落ちているタイミングがありません。

このままだと、また動作が重くなってしまうのでしょうか?再起動を余儀なくされるのでしょうか?伸びさせない方法はないのでしょうか?

いったん保留にしておきます。

また、先述のように、今は一つのサーバでマストドンもwordpressもowncloudも動かしているのですが、はたしてそれが良いことなのか。

Python – 一つのVPSで、複数のアプリを起動する(38723)|teratail

もしサービスダウンが問題になるなら、個々のサービスを複数の中途半端なサーバへ分散させるよりも、多少高価でもしっかりしたサーバで運用し、もう一台、少し低スペックでも良いので安価なサーバ上にバックアップ環境を構築した方が、少ないコストで信頼性の高いサービスを提供出来ると思います。

この質問を見た限りでは、1つのサーバに合わせても問題なさそう。ぼくとしてもやはり、そのほうが管理しやすいと思います。

あと、サービスが3つあるので、安いサーバであろうと3つ建てたら、合計金額が1つの良いサーバより高くなってしまいます。