Post

[Ghost]メモリ不足によるDroplet停止の解決方法

[移行につき画像が消失されました。念の為ドキュメントは残しておきます]

本ブログは、DigitalOceanを用いてデプロイされているが、一番安いプランを使用しているため、メモリが1Gbと少ない問題があります。

この問題を解決するためにはいくつかの方法がありますが、GhostがデプロイされているUbuntu環境でハードディスクをメモリとして使用する方法を紹介します。

使用環境

Image : Ubuntu Ghost 22.04

Region SGP1

1vCPU / 1GB RAM / 25GB Disk

まず、DigitalOceanにアクセスし、現在のDropletのコンソールを開きます。 次に、現在のSwap状況を確認するために、以下のコマンドを打ちます。

sudo swapon --show

打つとSwapがされていないと何も表示されないはずです。 次に、ハードディスクの空き容量があるかを確認しましょう。

df -h

1
2
3
4
5
6
7
8
root@jp:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs            96M  1.1M   95M   2% /run
/dev/vda1        25G  6.9G   18G  29% /
tmpfs           479M     0  479M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           479M     0  479M   0% /run/qemu
tmpfs            96M  4.0K   96M   1% /run/user/0

ここで、/dev/vda1 に十分な空き容量があるかを確認してください。Swap用に必要な容量とブログの画像などのデータをきちんと確認してどのぐらいSwapするかを決めましょう。

次は、swapファイルを生成します。 sudo fallocate -l {容量 , 例 : 1G} /swapfile

生成されたswapfileは以下のコマンドで確認できます。 ls -lh /swapfile

実行結果 -rw------- 1 root root 1.0G Jul 26 07:55 /swapfile

このSwapファイルを登録することで設定が完了します。まず、作ったswapfileを管理者権限のみ実行できるようにしましょう。 sudo chmod 600 /swapfile

次は、管理者権限でswapfileをマークします。 sudo mkswap /swapfile

実行結果例 Output Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

最後に、swapを登録します。 sudo swapon /swapfile

これで、本設定は完了しました。最初のコマンド sudo swapon --show でswap状況を確認すると、

Output NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -2

のように確認できると思います。また、free -hコマンドでメモリの確認ができます。

1
2
3
4
Output
              total        used        free      shared  buff/cache   available
Mem:          981Mi       123Mi       644Mi       0.0Ki       213Mi       714Mi
Swap:         1.0Gi          0B       1.0Gi

このswapファイルの設定を永続化します。(再起動しても消えないようにします。)サーバーなので、基本的に消えることはないと思いますが、バージョンアップなどや不具合で再起動が必要となる場合がるので、設定しておきましょう。

1
2
sudo cp /etc/fstab /etc/fstab.bak
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

以上のコマンドを打ち、バックアップをとって、stabフォルダに保存しておくことで永続化ができます。


番外として、swapの設定を変える方法を案内します。

swappiness パラメーターは、システムが RAM からスワップ領域にデータをスワップする頻度を構成します。 これは、パーセントを表す 0 ~ 100 の値です。

値がゼロに近い場合、サーバーは絶対に必要な場合を除き、データをディスクにスワップしません。swapfileとの対話は、RAM との対話よりもはるかに時間がかかり、パフォーマンスの大幅な低下を引き起こす可能性があるという点で「コストが高く」なることに注意してください。 通常、スワップにあまり依存しないようにシステムに指示すると、システムの速度が向上します。

値が 100 に近いほど、RAM の空き領域を増やすために、より多くのデータをスワップに投入しようとします。 アプリケーションのメモリ プロファイルやサーバーの使用目的によっては、場合によってはこの方が良い場合があります。

1
cat /proc/sys/vm/swappiness

このコマンドで現在のswappinessを確認できます。

1
2
3
#実行例
Output
60

デフォルトは60です。この値をサーバーに合わせて10に変更しましょう。

1
sudo sysctl vm.swappiness=10

このコマンドを打ちます。次に、

sudo vim /etc/sysctl.conf

などでsysctl.confを編集します。

最後の、行に、以下を追加します。

1
vm.swappiness=10

これでswappinessの変更が完了しました。


キャッシュプレッシャーの調整についても記載しておきます。

vfs_cache_pressure はシステムのアクセスデータのキャッシュ設定であるので、リソースを使用します。

この値を変更することもできます。(必要そうであれば変更してください。)

1
cat /proc/sys/vm/vfs_cache_pressure

これで現在の設定の確認ができます。

1
2
3
#実行例
Output
100

この値を変更するためには以下のコマンドが必要です。

1
sudo sysctl vm.vfs_cache_pressure=50

50に変更する場合

先と同様に、のコマンドを打ちます。次に、

sudo vim /etc/sysctl.conf

などでsysctl.confを編集します。

This post is licensed under CC BY 4.0 by the author.