为了提高性能,之前把博客更换到了HHVM平台,性能确实提高了不少,[scbutton link="http://www.wordpressnote.com/" target="blank" variation="red"]演示地址[/scbutton]但是偶尔会遇到502错误,重启HHVM之后就修复,目测是HHVM崩溃了。在网上找了一下,大多数处理思路都是建一个计划任务,在HHVM崩溃的时候重启,由于Linux Cron Job执行的最小时间单位是分,如果HHVM崩溃,最长的宕机时间不会超过一分钟,对普通博客而言,在可以接受的范围内,因此这个方法颇受欢迎。现在就将我尝试过的几种方法分享和大家分享一下:
方法一:监测进程状态重启HHVM

保存以下shell脚本,并赋予执行权限。我先保存为/etc/hhvm/hhvm_dog.sh

  1. <pre>#! /bin/bash  
  2.  PID="`cat /var/run/hhvm/pid`"   
  3.      if [ "$PID" == "" ]; then   
  4.         service hhvm start   
  5.      if [ "`ps ax -o pid | grep $PID`" == "" ]; then   
  6.         service hhvm restart   
  7.    fi   
  8. fi  

然后在crontab中每分钟运行一次这个脚本:
编辑/etc/crontab,在最后增加一行:

  1. * * * * * root /etc/hhvm/hhvm_dog.sh  

保存,退出,重启cron服务:

  1. service cron restart  

方法二:最简单方法

这个方法的思路和第一个方法一样,只是代码比较简洁,一步到位。看不懂代码没事,只需要把下面这句代码添加到/etc/crontab最后就好。

  1. * * * * * root [ -z "`ps -ef | grep hhvm | grep -v grep`" ] && service hhvm restart  

方法三: 最佳方案

修改fastcgi缓冲区大小的方式,周良博客使用的是Nginx作为web服务器,亲测有效。 打开nginx配置文件/etc/nginx/nginx.conf 在http{} 中添加一下两行:

  1. fastcgi_buffers 8 16k; fastcig_buffers_size 32k;  

保存退出,重启nginx:

  1. service nginx restart  

这个方法几乎可以完全避免HHVM崩溃,可以说前面的方法是治标,这个方法是治本。是目前我认为最完美的一个解决方案。 当然,还有其他的一些方法,例如写一个脚本,不断通过curl查看首页状态,如果返回502就重启HHVM。有兴趣的朋友可以自己尝试一下。 补充说明:以上方法仅适用于因HHVM崩溃导致的服务器502错误,适用PHP,或者在安装HHVM之前已经安装PHP并且二者冲突(通常不会)导致的502用这几个方法是无效的。

发表回复

后才能评论