我的服务器上运行着相当多的软件:httpd、varnish、mysql、memcache、java……
它们每个都使用一部分虚拟内存,并且 varnish 配置为分配 3GB 内存来运行。
由于流量负载高达 100K,我们的服务器内存不足,并且调用了 oom-killer。我们必须重启服务器。
我们有 8GB 的虚拟内存,但由于某种原因,我们无法扩展到更大的内存。
我的问题是 - 是否有任何自动脚本可以监视剩余的虚拟内存量并基于某些标准,比如说如果剩余 500MB 则自动重启服务器?
我确实知道这不是正确的解决方案,但我们必须这样做,否则我们不知道服务器何时会出现 OOM,而当我们知道并重新启动服务器时,我们就会失去访问用户。
答案1
如果我理解正确的话,你想要的是如下内容:
- 检查 VPS 上还剩余多少内存。
- 如果还剩下500M内存,请重新启动VPS。
可以按如下方式完成
- 编写一个脚本来检查剩余内存量并重新启动 VPS
- 将此脚本添加到 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 杀手并不总是有帮助,但关闭它也不会有帮助。
重新启动服务器可以暂时解决问题,但问题会再次发生。
我有服务器存在类似问题. 安装监控并将其配置为在内存耗尽时向我发出警告,这样我就可以在出现问题时访问服务器,这样我就可以正确诊断并解决问题。我还通过交换文件添加了交换,以增加在问题发生时访问服务器的时间。
就我的情况而言,我的网络服务器配置为启动过多的备用服务器,超出了服务器可以处理的负载。一旦我找出了问题的根本原因,我就着手解决它,从那以后服务器就再也没有崩溃过。