根据我的最后一个问题,我试图通过在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访问我的服务器,流浪者只需要几分钟就可以关闭。不管它在做什么,它都会彻底杀死我的服务器。
我听说HHVM使用了某种JIT,需要预热,然后在几次加载后启动?这可能是破坏我服务器的原因吗?我该怎么解决?
更新后:我必须收回我的话!!!!我将laravel代码从共享虚拟箱文件夹移到了非共享目录,现在一旦JIT启动,HHVM将在不到10ms的时间内加载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个请求或其他什么。
无论如何,我有和你一样的设置,nginx,hhvm 3.0.1,laravel,Ubuntu 14,在使用共享文件夹的VirtualBox映像上。我将同一个共享文件夹与运行PHP-FPM5.5的第二个映像一起使用。PHP-5.5在50毫秒左右的时间内加载laravel"you have arrival"页面,而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;
}