【问题标题】:Is there an easy way to automatically do a php-fpm restart after a 502 gateway timeout on server?有没有一种简单的方法可以在服务器上的 502 网关超时后自动重新启动 php-fpm?
【发布时间】:2013-11-12 13:53:27
【问题描述】:

对于使用 Wordpress 和 nginx 的大型网站安装心跳工具,您有任何有用的链接、提示或脚本吗?如果太多人同时访问该站点,服务器将关闭。发生这种情况后,我需要一些东西来立即自动重启网站。

问候

【问题讨论】:

  • 我宁愿扩大设置而不是在失败时重新启动它。
  • 查看fpm配置文件,失败后有杀死的东西,不记得具体是什么
  • 谢谢你们!会考虑并做一些研究。

标签: php wordpress nginx timeout restart


【解决方案1】:

您的问题是如何在 502 上重新启动 PHP。我的第一个答案是首先尝试防止 502 发生。

  1. PHP 可能消耗了太多内存。我的猜测是你的 php FCGI 孩子的数量设置得太高了。在您的 init 脚本中,您应该有一个类似 PHP_FCGI_CHILDREN=20 或类似的条目来控制将要启动的 PHP 进程的数量。我会尝试减少数量。如果您可以确定每个 PHP 进程的平均内存(可能使用 top),那么您可以确定应该运行的最大 PHP 进程数。例如,如果您有一个 2,000MB 的服务器,并且您的 PHP 进程每个最多消耗 100MB,那么您需要将它们限制为 20。

  2. 您可以创建另一个位置并以 @ 符号开始名称。 @ 符号用于“内部”位置。我喜欢使用 nginx 的http://openresty.org 发行版。它包括 ngx_lua http://wiki.nginx.org/HttpLuaModule 模块。 Lua 是一种脚本语言,可以(除其他外)执行 shell 命令。例如:

    location / {
      error_page 502 = @php502error;
    }
    location @php502error {
      content_by_lua 'os.execute("/bin/restart-my-php-processes.sh")';
    }
    

    os.execute 正在阻塞,所以你要记住这一点……我听说有人设置 thttpd 来运行脚本。所以你会在你的@php502error 位置使用proxy_pass。

【讨论】:

  • 好的,谢谢。我会检查这些设置。但我仍然认为问题在于有时太多人同时访问该网站。我们会看到;)
  • 理论上是个好主意。然而,网络服务器用户可能缺乏重新启动服务的权限......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
  • 2011-08-31
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多