お名前.com VPS にこれまでに
owasp/modsecurity-crs:nginxとWordPressのDockerイメージをインストールして、
WordPressを表示できるようにしてある。
しかし先に進むにつれ動作しなくなることがありVPSの再起動を繰り返した。
どうも原因はメモリ不足であることがわかった。
Swapを使うことで再起動する必要はなくなった。
あくまでも私は、こうやってみたということで動作やセキュリティの保証はできません。
環境
パソコン Windows11
VPS OS Ubuntu 20.04.3 LTS、 Dockerを使用
こちらの続きです。
Swapを使ってみる
Swapとは?私の認識を書くと。
プログラムは実行するとプロセスとなりメモリに格納される。
CPUはメモリにあるプロセスに従って処理を行う。
プロセスで1回限りで終了するものは、処理が終わればメモリから消える。
また、ずっと処理し続けるものもある。
プログラムをどんどん起動してプロセスを増やしていくとメモリがパンパンになる。
この状態をOOM(Out Of Memory)といって、
それ以上処理を続行できない状態。
そんなときメモリの領域をファイルという形でディスクに持つことで
疑似的に広げておけばメモリがパンパンになるのを避けられる。
そのための仕組みだと思います。
プロセスは絶えず動いているわけではないので寝ているときは
多分、ここに追い出されているのではないかと推察します。
参考:Ubuntu 20.04にスワップ領域を追加する方法 | DigitalOcean
WSL2/Ubuntu/Raspberry Piでのメモリ不足を解消する (zenn.dev)
【Linux】freeコマンドの内容を図解化してわかりやすく説明します
それではswapの設定をしていきます。
まずシステムのスワップ情報を確認
free -h
total used free shared buff/cache
available
Mem: 964Mi 623Mi 79Mi 35Mi 261Mi
153Mi
Swap: 0B 0B 0B ←使っていない。
現在のディスク使用量をチェックして、十分なスペースがあることを確認
df -h
Filesystem Size Used Avail Use% Mounted on
udev 466M 0 466M 0% /dev
tmpfs 97M 1.3M 96M 2% /run
/dev/vda1 78G 7.6G 70G 10% / ←ここの欄でディスク容量確認。
tmpfs 483M 0 483M 0% /dev/shm
ディスク容量は、こちらhttps://help.onamae.com/answer/9437で
20G→80Gにふやしています。
実施したときの様子お名前ドットコムVPSへ移行への道4-SSL/TLS化 | イチゲ ブログ (kikuichige.com)
参考サイトに「一般的に、システムのRAMの量と同じか2倍の量が、出発点として適しています。もう一つの経験則として、RAMのフォールバックとして使用するだけであれば、4Gを超えるスワップはおそらく不要です。」と書いてあるのでシステムのRAMの量は1G(VPS仕様のメモリの欄のことだと仮定)なので2Gにした。
Swap領域2G確保のコマンド
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
確認
free -h
total used free shared buff/cache available
Mem: 964Mi 624Mi 84Mi 35Mi 255Mi 151Mi
Swap: 2.0Gi 0B 2.0Gi ←2Gになった。
スワップファイルの永続化
再起動すると、サーバーはスワップ設定を自動的に保持しません。
これを変更するには、スワップファイルを/etc/fstabファイルに追加します。
何か問題が生じた場合に備えて、/etc/fstabファイルをバックアップします。
sudo cp /etc/fstab /etc/fstab.bak
次のように入力して、スワップファイル情報を/etc/fstabファイルの最後に追加します。
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
目次へ
効果確認
owasp/modsecurity-crs:nginxとWordPressのDjango動かしてVsコード2つ開いても動作している。
今までだと再起動が必要だった。freeで見ても0.7Gは超えないぐらいで安定してる。
今までは0.7G超えたら増えるばかりで動かなくなっていった。
メモリ使用量
free
total used free shared buff/cache available
Mem: 987920 673244 73456 34812 241220 123132
Swap: 2097148 398848 1698300 ←Swapが使われている。使ってなかったら単純計算で0.67+3.9で1G超えているので、動かなくなって再起動が必要だったろう。
この状態でディスク使用量をチェック
df -h
Filesystem Size Used Avail Use% Mounted on
udev 466M 0 466M 0% /dev
tmpfs 97M 1.4M 96M 2% /run
/dev/vda1 78G 9.6G 68G 13% / ←Swapする前は7.6Gだったので2G増えてる。
tmpfs 483M 0 483M 0% /dev/shm
スワップ設定の調整
参考:Ubuntu 20.04にスワップ領域を追加する方法 | DigitalOcean
スワップの動作を決めるパラメータがあるらしいので検討。
目次へ
Swappinessプロパティの調整
Ubuntu 20.04にスワップ領域を追加する方法 | DigitalOcean
swappiness
パラメーターは、システムがRAMからスワップ領域にデータをスワップする頻度を設定します。これは、パーセンテージを表す0~100の値です。値が0に近い場合、カーネルは絶対に必要な場合を除いて、データをディスクにスワップしません。スワップファイルとのやり取りは、RAMとのやり取りよりもはるかに時間がかかり、パフォーマンスが大幅に低下する可能性があるという点で、「コストがかかる」ことを忘れないでください。スワップにあまり依存しないようにシステムに指示すると、通常、システムの動作が高速になります。値が100に近い場合は、RAMの空き容量をより確保するために、より多くのデータをスワップしようとします。アプリケーションのメモリプロファイルまたはサーバーの使用目的によっては、この方が良い場合もあります。
略
デスクトップの場合、swappinessの設定を60にすることは不適切な値ではありません。サーバーの場合は、値を0に近づけると良いでしょう。
ということなのでサーバーは0に近い方がいいといっても
今回の場合、Swapなしの状態と同等の0に近づけるわけにはいかない。
処理スピードが遅くなっても停止するよりかはいいので、この辺で様子見。
安定しているなら数字を下げ、不安定なら上げてみようと思う。
現在のswappiness値を確認
cat /proc/sys/vm/swappiness
60
キャッシュプレッシャー設定の調整
「システムが他のデータ上の_inode_および_dentry_の情報をキャッシュするために選択する量を設定します。」参考:Ubuntu 20.04にスワップ領域を追加する方法 | DigitalOcean
indoleはディスク上のファイル名と場所を結びつけるデータでディスク上にあるため
アクセスに時間が、かかるのでアクセスした値はメモリに残しておくという意味だと思います。
しかし、この設定値に関しては意味がよくわかりません。
現在の値を確認。100より大きい値でもいいようですが、よく分からないのでこのまま。
cat /proc/sys/vm/vfs_cache_pressure
100
スナップショットを使ってみる
メモリ不足とは関係ないが、ある程度、めどがついたのでやってみます。
「スナップショットとは、任意の時点でディスクのイメージを保存しておき、
後からそのときの状態に復元できる機能です。」
ということだがスナップショットをとった時点に何もかも復活するわけではなさそうです。
この辺は「ディスクのイメージを保存」が何を意味するのか分かりません。
まずVPS(KVM)サーバーコントロールパネルでシャットダウンをクリックします。
やり方はスナップショットを取得する – レンタルサーバー ご利用ガイド (onamae-server.com)
終わったら
取得されたスナップショットの詳細のタイムスタンプが今日の日付の〇をクリックすると
ロールバックや削除する画面が出ます。
VPS(KVM)サーバーコントロールパネルでサーバーを起動しておきます。
シャットダウンしたのでコンテナが停止してるのがあるので調べてstartさせる。
Djangoは中に入ってrunserverする。こちら↓に再起動でやることが書いてあります。
ディスク使用量の変化
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 78G 9.7G 68G 13% /
↓スナップショットをしても変わってない?
/dev/vda1 78G 9.7G 68G 13% /
試しにすぐにロールバックしてみたが、特に変化はなかった。
所感
今まで、再起動を何度もやったが、これで再起動せずに安定しそうです。
ただ調子に乗って、いろいろ同時に動かすと停止はしなくても動作が重くなると思われます。
目次へ
イチゲをOFUSEで応援する(御質問でもOKです)Vプリカでのお支払いがおすすめです。
MENTAやってます(ichige)
コメント