如果虚拟内存太低,则自动重启服务器

如果虚拟内存太低,则自动重启服务器

我的服务器上运行着相当多的软件:httpd、varnish、mysql、memcache、java……

它们每个都使用一部分虚拟内存,并且 varnish 配置为分配 3GB 内存来运行。

由于流量负载高达 100K,我们的服务器内存不足,并且调用了 oom-killer。我们必须重启服务器。

我们有 8GB 的​​虚拟内存,但由于某种原因,我们无法扩展到更大的内存。

我的问题是 - 是否有任何自动脚本可以监视剩余的虚拟内存量并基于某些标准,比如说如果剩余 500MB 则自动重启服务器?

我确实知道这不是正确的解决方案,但我们必须这样做,否则我们不知道服务器何时会出现 OOM,而当我们知道并重新启动服务器时,我们就会失去访问用户。

答案1

如果我理解正确的话,你想要的是如下内容:

  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

希望你明白我的意思。

答案2

我遇到过类似的问题,虽然我不想质疑你的问题,但这个问题很好而且具体,但我不得不说你需要一个长期的解决方案。

OOM 杀手启动是因为您的服务器内存不足。关闭 OOM 杀手对此无济于事 - 您仍然会内存不足,并且您的服务器最终会崩溃。当然,OOM 杀手并不总是有帮助,但关闭它也不会有帮助。

重新启动服务器可以暂时解决问题,但问题会再次发生。

我有服务器存在类似问题. 安装监控并将其配置为在内存耗尽时向我发出警告,这样我就可以在出现问题时访问服务器,这样我就可以正确诊断并解决问题。我还通过交换文件添加了交换,以增加在问题发生时访问服务器的时间。

就我的情况而言,我的网络服务器配置为启动过多的备用服务器,超出了服务器可以处理的负载。一旦我找出了问题的根本原因,我就着手解决它,从那以后服务器就再也没有崩溃过。

相关内容