[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を編集します。