b-shock. Fortress

Mastodonインスタンスのメモリが湯水のように使える様になれ。

状況

mstdn.b-shock.orgのメモリがひっ迫し、ピンチなのである。 以下、Sensuによるスワップ容量の監視状況。

平常時のswapinfoはこんな感じ。

1
2
Device          1K-blocks     Used    Avail Capacity
/dev/vtbd0p3 1572864 798660 774204 51%

平常時で既にスワップしてて、しかも使用量が50%を越えているのは感心しないが、 それはそれとして。Mastodon本体にチューンの余地はあると思うが(スレッド減らしたりとか)。
調査したところ、一番メモリを食っているのは1時間ごとに実行しているpg_dumpらしい。 ちなみに、gzipする前のダンプファイルの大きさは以下の様な具合。383MBとのこと。

1
-rw-------   1 root   pooza   383M 12月  9 13:51 mastodon_2017-12-09.sql

スワップ容量をデフォルトのまま少なく設定してしまった(1.5GBほど)ことに まずは問題があり、運用を始めてしまってからでも出来る対策として スワップファイルの作成を試みた。
この対策は一見うまくいったかに見えたが、スワップファイルからの読み込みがスワップパーティション より遅い為に?VPSではエラーが発生して使い物にならなかった。

ちなみに、スワップを使い切っていよいよヤバいと、カーネルがこんなログを吐く。

1
2
3
2017-12-08T23:14:50.615180+09:00 dodok kernel: swap_pager: out of swap space
2017-12-08T23:14:50.615724+09:00 dodok kernel: swap_pager_getswapspace(6): failed
2017-12-08T23:14:50.816012+09:00 dodok kernel: swap_pager_getswapspace(2): failed

このログが出るとdmesgにも同様の出力がされるので、監視の対象になってる。
アラートが発生したら、出先からでもMastdonインスタンスのVPSをリブートしてる。 カジュアルにリブートができるのは、おひとりさまインスタンスだからだが。

対策

  1. スワップ領域を大きく取る為、OSのインストールから構築をやり直す。
  2. VPSのプラン変更。(1G→2G or 4G)
  3. 自宅鯖への撤退。

通常であれば1.か2.(又はその両方)が妥当だが、現在1Gのプランを2Gに上げたところで やはり将来不足する様に思われた。一方、物理PCなら、メモリ8GB程度ものでも非常に安価に 入手できる。
以前、自宅鯖をインターネットに晒すのは極力よそうと思い立ち、その後は大半のサービスを VPS化した。現在は、やむを得ない理由でsshを開けているだけ。(自宅のIPアドレスは 固定している 。たとえサーバを立てるわけでなくても、業務上必要なので)

自宅鯖にWebサービスを立てるのは、個人的な感情では「撤退」だ。
上で述べたような自宅鯖自体の是非もそうだし、また、おれ自身は「少しでも腕におぼえがあれば誰でも、 月額1,000〜2,000円程度の出費でMastodonインスタンスを立てられるんだから、もっとカジュアルに インスタンスを立てよう!」という立場だった。
月額2,000円を超えるVPS(又は自宅鯖)という条件は、気軽にお勧めできるラインを越えていると 感じる。

気を取り直して、今回買ったのはこれ。

DELL OptiPlex 7010 中古

届いたら、今回は記録をとりながら構築していく予定。既に多くの手順をChef化しているので、 手作業は多くないはずと思ってるが。
世にあまり出回っていない、FreeBSDでの構築記事が書けるのではないかと、そこは期待してる。