【问题标题】:Vagrant+Ubuntu 14.04+Nginx+HHVM = slow + crashingVagrant+Ubuntu 14.04+Nginx+HHVM = 慢 + 崩溃
【发布时间】:2014-06-11 22:13:44
【问题描述】:

根据我的last question,我正在尝试通过在 HHVM 下运行 Laravel 来加速它。

这需要我将服务器更新为 64 位,所以我现在正在运行 Trusty64。我通过 deb 包安装了 HHVM 和 Nginx。我不完全确定我的 nginx 配置是否正确,我从网上刮掉了这个:

server {
    listen 80 default_server;

    root /vagrant/public;
    index index.php index.html index.htm;

    server_name localhost;

    access_log /var/log/nginx/localhost.laravel-access.log;
    error_log  /var/log/nginx/locahost.laravel-error.log error;

    charset utf-8;

    location / {
        try_files \$uri \$uri/ /index.php?\$query_string;
    }

    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt  { log_not_found off; access_log off; }

    error_page 404 /index.php;

    include /etc/nginx/hhvm.conf;  # The HHVM Magic Here
}

我的网站在我点击它的前几次确实会加载。它现在的加载时间是内置 PHP 服务器的两倍多。几次刷新后,页面完全停止加载,nginx 给出 504 网关超时,我无法再通过 SSH 连接到我的服务器,vagrant 需要几分钟才能关闭。无论它在做什么,它都会彻底杀死我的服务器。

我听说 HHVM 使用某种 JIT 并且需要预热,然后在几次加载后启动?这可能是破坏我的服务器的原因吗?我该如何解决?

【问题讨论】:

  • 为了更好地了解您的问题,我建议您也可以在 GitHub 上打开一个问题。
  • @RaduMurzea 对于 HHVM?我开始认为 VirtualBox 共享文件夹可能与它有关。它们造成了巨大的性能损失,但我不知道这是否是导致我的服务器瘫痪的原因。可能是两个人在一起玩得不好。自从我解决了这个问题后,还没有尝试重新安装 HHVM;如果事实并非如此,我会开票。
  • 你能把fastcgi_keep_conn on添加到你的nginx配置吗?

标签: php ubuntu nginx vagrant hhvm


【解决方案1】:

更新后:我必须吃我的话!!!! 我将 laravel 代码从共享虚拟框文件夹移动到非共享目录,现在一旦 JIT 启动,HHVM 会在不到 10 毫秒的时间内加载 laravel 欢迎屏幕。

有一个启动配置设置指示在 HHVM JIT 启动之前所需的请求数。

这是我用于 HHVM 的 ini 文件:

 pid = /var/run/hhvm/pid

 hhvm.server.file_socket=/var/run/hhvm/hhvm.sock
 hhvm.server.type = fastcgi
 hhvm.server.default_document = index.php
 hhvm.log.level = Warning
 hhvm.log.always_log_unhandled_exceptions = true
 hhvm.log.runtime_error_reporting_level = 8191
 hhvm.log.use_log_file = true
 hhvm.log.file = /var/log/hhvm/error.log
 hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbc
 hhvm.mysql.typed_results = false

 hhvm.eval.jit_warmup_requests = 1

jit_warmup_requests = 1 表示优化前重新加载一次,但您可以将其设置为0 以使其立即启动。我认为如果不指定,它就像是 10 个请求或什么的。

无论如何,我在使用共享文件夹的 VirtualBox 映像上的设置与您相同,nginx、hhvm 3.0.1、laravel、Ubuntu 14。我将同一个共享文件夹与运行 PHP-FPM5.5 的第二个图像一起使用。 PHP-5.5 加载 laravel '你已经到达' 页面大约需要 50 毫秒,而 HHVM 版本更多的是大约 250 毫秒——比预期的性能要低得多。我将测试在非共享目录中运行代码,但我怀疑这是问题所在。

我怀疑这与必须在运行时与编译时评估的代码量有关。我知道如果我使用许多魔术方法和变量运行代码,HHVM 并不能完全发挥作用。 Laravel 进行了一些时髦的自动加载来实现它对命名空间等的隐藏,这可能会产生一些影响,但我需要更深入地对此做出坚定的立场。

我的 nginx 配置文件中有这个用于将脚本传递给 HHVM(请注意,我使用的是套接字,而不是 TCP,还没有使用 hack。)

      location ~ \.php$ {
            fastcgi_pass unix:/var/run/hhvm/hhvm.sock;

            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include         fastcgi_params;
         }

【讨论】:

  • 感谢您分享您的发现。共享文件夹对性能有很大影响,但我不确定它是否会使 HHVM 优于 PHP-FPM;我不认为它应该这样做,但 也许 它会扰乱它的优化。自从我设置了 vagrant-rsync 后,我就再也没有尝试过 HHVM。如果您进一步追求这一点,请告诉我!
  • @Mark 查看我的更新——共享文件夹确实影响了它。我现在看到它的执行速度非常快。
  • 这是我的:pastebin.com/raw.php?i=xyAMUdRg,但我得到“connect() to unix:/var/run/hhvm/sock failed”。我认为我没有正确启动 HHVM 服务 - 除了sudo /etc/init.d/hhvm restart,您还需要做其他事情吗?
  • 您需要在您的 HHVM ini 文件中设置套接字。我使用的(上面列出的)是/etc/hhvm/server.ini,但你的名字可能不同。我使用hhvm.server.file_socket=/var/run/hhvm/hhvm.sock 设置套接字并禁用任何 TCP 地址/端口选项
猜你喜欢
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多