web-dev-qa-db-ja.com

仮想メモリが少なすぎる場合はサーバーを自動再起動します

私のサーバーでは、httpd、varnish、mysql、memcache、Javaなどのかなりの数のソフトウェアが実行されています。

それぞれが仮想メモリの一部を使用しており、ワニスは実行する3GBのメモリが割り当てられるように構成されています。

100Kの高いトラフィック負荷のため、サーバーのメモリが不足し、oom-killerが呼び出されました。サーバーを再起動する必要があります。

8GBの仮想メモリがあり、何らかの理由でそれ以上のメモリに拡張することはできません。

私の質問は-残りの仮想メモリの量を監視し、特定の基準に基づいて、サーバーを自動的に再起動するよりも500MB残っているかどうかを監視する自動スクリプトはありますか?

これが適切な解決策ではないことはわかっていますが、実行する必要があります。そうしないと、サーバーがいつOOMになるかわからず、サーバーを認識して再起動するまでに、訪問しているユーザーを失いました。

4

私があなたを正しく理解しているなら、あなたは次のようなものが欲しいです:

  1. VPSに残っているメモリの量を確認します。
  2. 500Mのメモリが残っている場合は、VPSを再起動します。

これは次のように行うことができます

  1. 残りのメモリ量をチェックするスクリプトを作成し、VPSを再起動します
  2. このスクリプトをcrontabに追加して、タスクを自動化します。

例えば

#!/bin/bash

mem=$(free -m | awk '/Mem:/{print $4}')

(( mem <= 500 )) && reboot

スクリプトを実行可能にする

chmod +x scriptname //拡張子を追加しないことに注意してください

スクリプトをcronに追加します

crontab -e

* * * * * user_to_run_the_script /path/to/the/script

あなたがアイデアを得ることを願っています。

7

私も同様の問題を抱えていました。あなたの質問に疑問を投げかけたくはありませんが、長期的な修正が必要だと言わざるを得ません。

サーバーのメモリが不足しているため、OOMキラーが起動します。 OOM killerをオフにしても、それは役に立ちません。メモリが不足し、サーバーが最終的にクラッシュします。確かに、OOMキラーは常に役立つとは限りませんが、オフにすることも役に立ちません。

サーバーを再起動すると一時的に問題が解決しますが、再び発生します。

私は サーバーに関する同様の問題 を持っていました。 monit をインストールし、メモリが不足したときに警告するように構成すると、何かが発生し始めたときにサーバーにアクセスできるようになったため、適切に診断して解決することができました。また、スワップファイルを介してスワップを追加し、問題の発生中にサーバーにアクセスする必要がある時間を増やしました。

私の場合、私のWebサーバーは、サーバーが処理できる負荷に対して非常に多くのスペアサーバーを起動するように構成されていました。問題の根本原因を突き止めたら、それに取り組みましたが、それ以来サーバーはクラッシュしていません。

2
dunxd