【问题标题】:Automatically restarting HHVM when it stops responding but process not dead停止响应但进程未死时自动重启 HHVM
【发布时间】:2014-11-20 19:21:01
【问题描述】:

我遇到了一个问题,每 12-24 小时,HHVM 就会崩溃,但它似乎让进程继续运行。似乎大多数提供商只是使用 php5-fpm 作为 nginx 中的故障转移以保持稳定性。但是,这不会重新启动无响应的 hhvm 实例。

由于进程保持运行,大多数服务器监控解决方案会将其视为实时守护程序,而不是重新启动它。 HTTP 监控可能反应缓慢。

是否可以在故​​障转移时触发 hhvm 重启?如果不是,那么确保重新启动无响应的侦听守护程序的最佳解决方案是什么。

【问题讨论】:

    标签: nginx monitoring daemon hhvm


    【解决方案1】:

    kristapsk 在官方 bug 上发布了关于此主题的解决方案。 这是他告诉添加到 cron 的脚本,每 2 分钟执行一次。

    我对其进行了一些修改,使其可以与 HHVM 的预构建包一起使用。

    #! /bin/bash
    PID="`cat /var/run/hhvm/pid`"
    
    if [ "$PID" == "" ]; then
        echo No PID, starting up
        /etc/init.d/hhvm start
    else
        if [ "`ps ax -o pid | grep $PID`" == "" ]; then
            echo HHVM PID $PID not running, starting up
            # Stop, just in case, if crashed. Else you would get:
            #  * WARNING: hhvm.83 has already been started
            /etc/init.d/hhvm stop
            /etc/init.d/hhvm start
        fi
    fi
    

    【讨论】:

    • 我相信这是一个简单的 cron 脚本,用于检查以确保 HHVM 进程仍在运行。不幸的是,这并不能解决检查一个仍在“侦听”的进程是否刚刚变得无响应的问题。
    • @etc,当 HHVM 无响应时崩溃 :-)
    • 并非总是如此。这实际上是一个有据可查的问题。
    • @etc,我说的是我六个月多的经历。但是如果你说的事情真的发生了,那么从 cron 中执行一个回显 hello world 的脚本,然后比较输出。
    • @etc,在您描述的情况下(我似乎也正在经历),HHVM 还在听吗?还是只是超时?如果是前者,您也许可以调整此 cron 以执行类似 lsof -i TCP:9000 的操作,而不是查找 PID。
    【解决方案2】:

    关于您对另一个答案的评论,当您回退到 php 并且您希望确保 HHVM 是响应的一个时,一个不错的选择是在您的状态脚本中使用来自the answer here 的解决方案进行一次更改检查:

    if (defined('HHVM_VERSION')) {
      echo 'status';
    }
    

    这两种解决方案相结合将处理 hhvm 的所有可能崩溃方式。

    【讨论】:

      猜你喜欢
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多