【问题标题】:How to restart HTTPD server when low memory? [closed]内存不足时如何重启 HTTPD 服务器? [关闭]
【发布时间】:2019-07-25 10:51:16
【问题描述】:

我有一个托管在 AWS 上的 VPS,它使用httpd 运行 PHP。通常,一段时间后服务器(4GB RAM)超载并需要永远响应请求,但不会给出任何错误。重启httpd 解决了这个问题,但由于它没有给出任何错误,forever 无法自动重启它。当服务器内存低于特定数字时,如何写入脚本以重新启动 httpd sudo service httpd restart?谢谢。

【问题讨论】:

  • 4GB RAM 并不是那么小。你有没有监测到是什么在吞噬记忆?考虑从 Apache 更改为替代的 http(s) 服务器。此外,调整 swappiness 有助于保持系统响应。
  • 如果有 SSD,请将交换空间放在那里。
  • 这个服务器是UI和另一个3rd-party服务器之间的网关,3rd-party服务器通常很慢,我无法控制它,所以我猜是在等待响应的时候内存被吃掉了第三方服务器
  • 在命令行尝试top -o RES

标签: php apache amazon-web-services ubuntu


【解决方案1】:

您可以编写一个每 5 秒或您认为的任何间隔运行的 cron,并重新启动服务 httpd。

【讨论】:

  • 请注意,此服务器运行密集型任务并且不需要立即响应,等待 20 秒响应即可,如果我这样做并且服务器正在处理请求,那么请求将失败,不会吗?如果服务器需要永远响应,我有一个日志系统来记录每个失败的请求并稍后再次请求,但仅适用于服务器失败的情况。每 5 秒重新启动一次会淹没该日志系统。但是,检查内存并在需要时重新启动的 cron 作业是个好主意,谢谢。
  • 那是评论,不是答案。那么,他是如何编写 cronjob 的呢?这会将其转化为答案。
【解决方案2】:

我从你的问题猜想你正在使用 Ubuntu/Debian 兼容的操作系统。 Linux 上的free 命令为您提供系统的内存使用情况。因此,您可以使用freegawk(从输出中过滤必要的信息)编写一个bash脚本,以在满足任何内存使用条件时发出重启命令。 最后创建一个 cron 来定期运行你的脚本

【讨论】:

【解决方案3】:

这是一个没有真正好的答案的问题,因为首先你需要找出到底是什么占用了你的所有 RAM。

我有几个 VPS,一些只有 2GB 内存,运行 CWP.Pro、防火墙、DNS 和邮件服务器,并且 HTTPD 在大量请求后仍然不会崩溃。

请考虑解决这个问题。

为了回答您的问题,如果您有 Monit 设置,它可以做您想做的事。它监视您的服务并在占用过多资源后停止它们,在未运行或出现问题时重新启动它们等。

这里有一段摘录来说明使用它的人所说的话:

当您无法监控服务器的服务可用性时,最好借助自动监控和重启实用程序。过去 4 天,我在享受假期时离开了我的服务器。在此期间,由于负载,我的 lighttpd 网络服务器死了,但它在 2 分钟内自动重新启动。我在一个名为monit 的Linux 系统上配置了用于监控服务的实用程序。它提供了系统监控和执行类 UNIX 系统的错误恢复所需的所有功能。

总结一下我在这里所说的是安装和使用Monit的链接: Monit 3rd Party

还有官网: Official Site

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-14
    • 2012-11-08
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多