私のサーバーでは、httpd、varnish、mysql、memcache、Javaなどのかなりの数のソフトウェアが実行されています。
それぞれが仮想メモリの一部を使用しており、ワニスは実行する3GBのメモリが割り当てられるように構成されています。
100Kの高いトラフィック負荷のため、サーバーのメモリが不足し、oom-killerが呼び出されました。サーバーを再起動する必要があります。
8GBの仮想メモリがあり、何らかの理由でそれ以上のメモリに拡張することはできません。
私の質問は-残りの仮想メモリの量を監視し、特定の基準に基づいて、サーバーを自動的に再起動するよりも500MB残っているかどうかを監視する自動スクリプトはありますか?
これが適切な解決策ではないことはわかっていますが、実行する必要があります。そうしないと、サーバーがいつOOMになるかわからず、サーバーを認識して再起動するまでに、訪問しているユーザーを失いました。
私があなたを正しく理解しているなら、あなたは次のようなものが欲しいです:
これは次のように行うことができます
例えば
#!/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
あなたがアイデアを得ることを願っています。
私も同様の問題を抱えていました。あなたの質問に疑問を投げかけたくはありませんが、長期的な修正が必要だと言わざるを得ません。
サーバーのメモリが不足しているため、OOMキラーが起動します。 OOM killerをオフにしても、それは役に立ちません。メモリが不足し、サーバーが最終的にクラッシュします。確かに、OOMキラーは常に役立つとは限りませんが、オフにすることも役に立ちません。
サーバーを再起動すると一時的に問題が解決しますが、再び発生します。
私は サーバーに関する同様の問題 を持っていました。 monit をインストールし、メモリが不足したときに警告するように構成すると、何かが発生し始めたときにサーバーにアクセスできるようになったため、適切に診断して解決することができました。また、スワップファイルを介してスワップを追加し、問題の発生中にサーバーにアクセスする必要がある時間を増やしました。
私の場合、私のWebサーバーは、サーバーが処理できる負荷に対して非常に多くのスペアサーバーを起動するように構成されていました。問題の根本原因を突き止めたら、それに取り組みましたが、それ以来サーバーはクラッシュしていません。