HipHop/HHVM可以作为守护进程运行(因此它在重新启动后会自动启动)
sudo /usr/bin/hhvm --mode daemon --config /etc/hhvm/server.hdf
Run Code Online (Sandbox Code Playgroud)
运行时,它完美地工作(这表明配置是可以的).但重新启动机器后,HHVM消失了,需要手动重启.以上行包括 这些配置已从HHVM创建者的官方教程中删除.经典服务语法sudo service hhvm start也可以很好地工作,但不会超过机器重启.
/var/log/hhvm/error.log中的HHVM错误日志在每次重新启动时记录此行:Unable to open pid file /var/run/hhvm/pid for write./etc/hhvm/server.hdf有PidFile = /var/run/hhvm/pid在第一线.由于默认情况下它附带HHVM,我不想更改它.我认为sudo就是问题所在.没有sudo HHVM将无法运行.Chmod 777'的pid文件并指向另一个空文件并没有解决问题.
将HHVM安装为守护进程的正确方法是什么?
我试图通过fastCGI在HHVM(3.0)和Apache(2.4)上部署Symfony2(2.4)应用程序,按照此处的说明 - https://github.com/facebook/hhvm/wiki/FastCGI
虽然我可以通过这种方式正确执行单个php文件,但它似乎不适用于Symfony2路由系统.路由已正确解析(例如localhost/myapp/web/app_dev.php/my/route/to/something),但页面本身不会加载.相反,页面只输出"未找到",HHVM记录以下内容:
没事做.要么传递.php文件来运行,要么使用-m server
这似乎表明它认为它没有通过正确的PHP文件.
应该注意的是,部署使用HHVM 2.x附带的内置Web服务器工作正常.但是,从HHVM 3.0开始,不再支持此服务器.
对于要改变哪些配置以使其工作,我感到非常遗憾.即使是能够正确解决这一问题的指针也是一个很好的答案.
谁能解释一下这是如何工作的?
http://docs.hhvm.com/manual/en/hack.lambda.php
变量是自动和可传递的(包括$ this):
<?hh
$z = 11;
$foo = $x ==> $y ==> $x * $z + $y;
$bar = $foo(5);
var_dump($bar(4)); // outputs 59
Run Code Online (Sandbox Code Playgroud) 目前,我们已开始在生产环境中使用HHVM,到目前为止,几乎所有结果都非常令人反感.与使用APC的PHP-FPM相比,我们的整体交易率大大提高.几乎所有请求都在500毫秒以下,但是每隔几个请求(5到10个左右)就会产生2到5秒的请求时间.
请求的页面似乎没有任何区别,并且一遍又一遍地请求同一页面将在几个请求中触发此行为.
我们使用以下命令行选项在服务器模式下运行HHVM:
/usr/bin/hhvm --mode server -vServer.Type=fastcgi -vServer.FileSocket=/usr/local/php55/sockets/admin.sock -vPidFile=/var/run/hhvm/admin.pid -vEval.Jit=true -vServer.ThreadCount=24 -vServer.APC.EnableApc=true
Run Code Online (Sandbox Code Playgroud)
我们正在为这些相关配置的网络服务器运行nginx(对不起,如果我忘记了一些重要的东西).
fastcgi_buffer_size 128k;
fastcgi_buffers 256 16k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_read_timeout 240;
fastcgi_intercept_errors on;
Run Code Online (Sandbox Code Playgroud)
服务器有128GB内存和24个内核(超线程实际上是12个).
我们在https://github.com/facebook/hhvm/wiki/Runtime-options上进行了相当多的搜索,但大多数选项都没有得到很好的解释,所以我不知道他们做了什么,并在生产环境中测试它们是有点吓人.
如果这里的任何人有类似的问题,或者可能指出我的方向与一些HHVM选项我会非常感激.
使用的HHVM版本来自http://www.hop5.in/yum/el6/
HipHop VM 3.0.1 (rel)
Compiler:
Repo schema: e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
Run Code Online (Sandbox Code Playgroud)
和/etc/hhvm/config.hdf
Log {
Level = Warning
AlwaysLogUnhandledExceptions = true
RuntimeErrorReportingLevel = 8191
}
MySQL {
TypedResults = false
}
Run Code Online (Sandbox Code Playgroud)
我们正在使用supervisord启动HHVM,所以这里的主管配置如下:
[program:hhvm]
stopasgroup=true
killasgroup=true
command=/usr/bin/hhvm --mode server -vServer.Type=fastcgi -vServer.FileSocket=/usr/local/php55/sockets/admin.sock -vPidFile=/var/run/hhvm/admin.pid -vEval.Jit=true -vServer.ThreadCount=24 -vServer.APC.EnableApc=true
user=admin
stdout_logfile=/var/log/hhvm/admin.log
stderr_logfile=/var/log/hhvm/admin.error.log
directory=/home/admin
umask=000
Run Code Online (Sandbox Code Playgroud)
/etc/hhvm/php.ini中有一个php.ini,但内容为空.所有页面都尝试了一些数据库连接,但这通常是非常小的.完整的图片也是my.cnf.使用的mysql版本是percona
[mysql] …Run Code Online (Sandbox Code Playgroud) 经过一天寻找解决方案后,我希望在这里找到答案.
我在Homestead 2.0(Vagrant)上运行Laravel 4.2,我试图得到一个简单的解析错误输出到我的浏览器,但我不断得到一个白色的屏幕.
我可以通过在Vagrant机器上运行'hhvm index.php'来找到错误,但这不是我想要的,我想在浏览器中输出它.
是否有任何选择可以实现这一目标?
在我的Homestead.yaml中尝试使用hhvm:false,但这似乎被忽略了?如何在没有hhvm的情况下运行Homestead呢?将我的问题解决为-_-.
发现hhvm-fastcgi + nginx如何让它在浏览器中显示致命错误但没有任何答案和来自facebook
这些是您放在/etc/hhvm/config.hdf中的选项.我们正在杀死.hdf文件,转而使用标准的php.ini
尝试设置set_error_handler但似乎也没有工作
还有其他选择吗?
我正在使用imagick将pdf转换为我在脚本中的jpg ...如果我在没有指定页面的情况下给出上传的pdf的直接路径,但是当我添加[0]到文件路径的末尾时,它工作正常指定我只想读取第一页,它突然出现以下错误:
"致命错误:未捕获异常'ImagickException',消息'提供的文件名无效'Imagick-> readImage()"
我也试过用 '/path/to/file.pdf[0]'在构造函数中直接使用没有运气,但没有页面说明符,也可以正常工作.
根据文件...这应该工作.我在这做错了什么?
$doc_preview = new Imagick();
$doc_preview->setResolution(180,180);
$doc_preview->readImage('/path/to/file.pdf[0]');
$doc_preview->setImageFormat('jpeg');
$doc_preview->writeImage('/path/to/file.jpg');
$doc_preview->clear();
$doc_preview->destroy();
Run Code Online (Sandbox Code Playgroud)
更新:我应该提到我正在使用HHVM.不确定这会对这种情况产生影响......但我是.
UPDATE2:我在HHVM github repo上打开了一个问题.希望他们能解决这个问题...直到那时,我在下面标记正确的答案是一个体面的(虽然是hacky)解决方法.
我知道我可以使用设置环境变量
putenv("ENV_FOO=SOMETHING");
Run Code Online (Sandbox Code Playgroud)
并通过以下方式获取价值:
getenv("ENV_FOO");
Run Code Online (Sandbox Code Playgroud)
如果未设置变量,getenv("ENV_FOO")则返回false.
我有一个可以通过环境变量设置的功能集,我想在设置或未设置变量时对行为进行单元测试.
然而,一旦在bash中通过我的开发机器导出变量
export ENV_FOO=something`
Run Code Online (Sandbox Code Playgroud)
它打破了我的单元测试,因为我不能使用php取消环境变量来测试范围.
我尝试过putenv("ENV_FOO=");这将返回一个空字符串"",而不是当前shell会话的未设置环境变量.
有没有办法为当前的shell会话取消设置环境变量,还是我必须改变测试变量存在的方式?
有没有办法告诉HHVM将Hacklang警告和错误输出到浏览器中?像PHP这样的东西启用display_errors,display_startup_errors并error_reporting设置为E_ALL
HHVM版本:
$ php -v
HipHop VM 3.1.0-dev+2014.04.09 (rel)
Compiler: heads/master-0-g4fc811c64c23a3686f66a2bea80ba47f3eaf9f3d
Repo schema: 79197c935790c0b9c9cb13566c3e727ace368117
Run Code Online (Sandbox Code Playgroud)
我尝试过以下配置:
$ cat /etc/hhvm/php.ini
; php options
display_startup_errors = On
error_reporting = E_ALL
display_errors = On
; hhvm specific
hhvm.log.level = Warning
hhvm.log.always_log_unhandled_exceptions = true
hhvm.log.runtime_error_reporting_level = 8191
hhvm.mysql.typed_results = false
Run Code Online (Sandbox Code Playgroud)
而且:
$ cat /etc/hhvm/server.ini
; php options
pid = /var/run/hhvm/pid
; hhvm specific
hhvm.server.port = 9000
hhvm.server.type = fastcgi
hhvm.server.default_document = index.php
hhvm.log.level = Warning
hhvm.log.always_log_unhandled_exceptions = true …Run Code Online (Sandbox Code Playgroud) 我在ubuntu 12.04 LTS 64 whit HHVM Fastcgi服务中安装LEMP服务器,我通过laravel.phar安装laravel(并通过composer测试)当在brwoser中获取我的网站时不显示任何错误但在Chrome开发人员控制台中获取错误500

我在error.log文件中看不到任何错误(laravel - hhvm,nginx)
存储目录权限是777
我的nginx.conf和vhosts文件有基本配置
当我使用PHP CLI或hhvm命令时,它运行良好
谢谢你的帮助:)
我的位置块
location ~ \.(hh|php)$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_keep_conn on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
Run Code Online (Sandbox Code Playgroud) 我一定错过了什么.但是我通过运行获得了与php和hhvm相同的性能
ab -n 100 -c 10 http://127.0.0.1:8080/
php -v返回:
HipHop VM 3.2.0 (rel)
Compiler: tags/HHVM-3.2.0-0-g01228273b8cf709aacbd3df1c51b1e690ecebac8
Repo schema: c52ba40f4a246d35a88f1dfc1daf959851ced8aa`
Run Code Online (Sandbox Code Playgroud)
tail -3 /var/log/nginx/access.log 回报
127.0.0.1 - - [13/Sep/2014:02:46:33 +0300] "GET / HTTP/1.0" 200 116 "-" "ApacheBench/2.3"
127.0.0.1 - - [13/Sep/2014:02:46:33 +0300] "GET / HTTP/1.0" 200 116 "-" "ApacheBench/2.3"
127.0.0.1 - - [13/Sep/2014:02:46:33 +0300] "GET / HTTP/1.0" 200 116 "-" "ApacheBench/2.3"`
Run Code Online (Sandbox Code Playgroud)
nginx conf:
location ~ \.(hh|php)$ {
fastcgi_keep_conn on;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Run Code Online (Sandbox Code Playgroud)
这是我的/etc/hhvm/php.ini档案:
hhvm.log.level …Run Code Online (Sandbox Code Playgroud)