标签: hhvm

HHVM - FastCGI:性能不佳

我正在尝试从PHP 5.4(使用FPM作为FastCGI和apc)在nginx上迁移到HHVM - FastCGI(也是nginx).

我的应用程序是一个以Slim为框架的广告服务器.广告服务器连接到redis,memcached(用于套接字和http),MySQL,MongoDB(这些端点在HHVM版本中禁用),使用SOAP和beanstalkd连接到Java后端.

该应用程序有一个测试端点,计算一个Fibonacci系列,在请求11之后速度非常棒!

但是......其他终端的基准在hhvm中更糟糕(当然,在请求11之后).

我认为这总是hhvm模式解释器.

一些想法?

谢谢!

环境:

8个处理器和8GB RAM.

$ uname -a
Linux 3.13.0-30-generic #55-Ubuntu SMP Fri Jul 4 21:40:53 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04 LTS
Release:    14.04
Codename:   trusty
Run Code Online (Sandbox Code Playgroud)

我编译了hhvm,因为我修改了phpredis:

$ hhvm --version
HipHop VM 3.2.0-dev (rel)
Compiler: heads/master-0-gb7802e739a1f16808dd06c57754c1dc77ed80054
Repo schema: acdee0ea91d0b5967c60a0a42f5dbf81433a7821
Run Code Online (Sandbox Code Playgroud)

测试:

斐波纳契测验

PHP

1.1112360954285
Run Code Online (Sandbox Code Playgroud)

HHVM

1.7104048728943
1.7193510532379
1.7104179859161
1.713366985321
1.7120008468628
1.7102618217468
1.7118058204651
1.7113170623779
1.7101211547852
1.7117080688477
1.7127840518951
0.10136723518372
Run Code Online (Sandbox Code Playgroud)

地理定位测试(SOAP) …

php performance hhvm

13
推荐指数
1
解决办法
1018
查看次数

通过带有nginx的套接字为HHVM 3.0配置ini文件

我能够启动HipHop VM以使用unix套接字.我可以通过以下方式实现:

 /usr/bin/hhvm --config /etc/hhvm/server.ini  --mode daemon -vPidFile=/var/run/hhvm/pid -vServer.Type=fastcgi -vServer.FileSocket=/var/run/hhvm/hhvm.sock
Run Code Online (Sandbox Code Playgroud)

但是,我无法在任何地方找到参考,如何在ini我为配置指定的文件中设置它.要使用TCP端口,server.ini中的行是:

  hhvm.server.port = 9000
Run Code Online (Sandbox Code Playgroud)

我试过了两个

 hhvm.server.filesocket=/var/run/hhvm/hhvm.sock
 hhvm.server.socket=/var/run/hhvm/hhvm.sock
Run Code Online (Sandbox Code Playgroud)

两者都失败了 任何人都知道文件设置或可以找到这些设置的参考?

hiphop hhvm

11
推荐指数
1
解决办法
7123
查看次数

如何使HHVM的MySQL驱动程序返回ID作为整数?

我注意到我的Laravel API没有将实体标识符(主键)作为整数返回.

在Api\PostController.php :: show()中:

function index()
{
    $posts = Post::all();

    return $posts;
}
Run Code Online (Sandbox Code Playgroud)

返回的内容如下:

[{
    "id": "1",
    "title": "Post one",
    ...
},{
    "id": "2",
    "title": "Post two",
    ...
}]
Run Code Online (Sandbox Code Playgroud)

这会弄乱我的表排序(因为ID将被排序为字符串:1,10,11,2等).

转储实体本身也表明该id属性是一个字符串.

如前所述这里可能的原因是,MySQL驱动程序不会在适当类型的返回值.

我在Ubuntu 14.04服务器上使用HHVM 3.3.1.有什么方法可以使用本机MySQL库(如php5-mysqlnd)用于HHVM吗?

我可以使用Laravel模型访问器来解决问题.但这更像是一个黑客IMO.

请帮忙!


参考文献:


编辑:我已经确认它不是Laravel的ORM层.PDO实例已将ID作为字符串返回.

php mysql ubuntu laravel hhvm

11
推荐指数
1
解决办法
672
查看次数

使用HHVM运行phpunit测试(HipHop)

我试图在虚拟Ubuntu 12.04(64位服务器)安装上通过HHVM运行PHPUnit单元测试.测试通常使用位于我的tests目录中的phpunit.xml文件运行,该文件包含一个用于处理自动加载的引导文件,并且测试在普通的php安装上运行良好.但是,我一直在:

HipHop Fatal error: File not found: File/Iterator/Autoload.php in /usr/share/php/PHPUnit/Autoload.php on line 64
Run Code Online (Sandbox Code Playgroud)

运行时:

hhvm -f /usr/bin/phpunit /path/to/my/testsDirectory/SomeTest.php
Run Code Online (Sandbox Code Playgroud)

我还没有弄清楚如何使用bootstrap或配置文件在hhvm下运行phpunit ...任何帮助将不胜感激.

php phpunit unit-testing hhvm

10
推荐指数
2
解决办法
3890
查看次数

nginx map接受头到api奇怪行为的子目录

我已经花了很长时间来解决这个问题,而且我无法理解nginx + hhvm如何映射我的请求.

基本上,我在api.example.com上有一个API,我想用Accept:application/vnd.com.example.api.v1 + json调用版本1和application/vnd.com.example.api.v2 + json for version 2. API本身是一个PHP应用程序,我将使用全新安装的HHVM运行.所有请求都将由index.php处理.

文件夹结构如下所示:

api.example.com/
  index.php (content: fail)
  v1/
    index.php (content: v1)
  v2/
    index.php (content: v2)
Run Code Online (Sandbox Code Playgroud)

每当我使用我的REST客户端访问带有v1接受标头的api.example.com/test时,我都会收到v1响应.当我使用v2的accept标头时,它会显示v2.所以一切都是正确的.如果我不提供任何接受标题,我会被重定向到example.com

NGINX配置如下所示

map $http_accept $api_version {
        default 0;
        "application/vnd.com.example.api.v1+json" 1;
        "application/vnd.com.example.api.v2+json" 2;
}

server {
        # listen to :80 is already implied.

        # root directory
        root /var/www/api.example.com/;
        index index.html;

        server_name api.example.com;
        include hhvm.conf;

        location / {
                if ($api_version = 0) {
                        # redirect to example.com if applicable
                        # Accept-header is missing
                        return 307 http://example.com;
                } …
Run Code Online (Sandbox Code Playgroud)

php api http nginx hhvm

9
推荐指数
1
解决办法
930
查看次数

HHVM Memcache集成

我有一个安装了Memcache的Drupal 7网站,它在Apache2 Web服务器上运行良好.现在我已经用HHVM(HipHop)替换了Apache2,并且在性能上得到了真正的提升.

问题是显然Drupal无法与Memcache服务器交互.这是错误:

Notice: Use of undefined constant MEMCACHE_COMPRESSED - assumed 'MEMCACHE_COMPRESSED' in dmemcache_set() (line 44 of /.../modules/memcache/dmemcache.inc).
Run Code Online (Sandbox Code Playgroud)

当然,没有任何内容存储在Memcache中.

我想Drupal的Memcache模块正在使用PECL Memcache:set(),这在新安装的HHVM中是不可用的.HHVM是否有类似PECL的安装?

谢谢

php drupal hiphop hhvm

8
推荐指数
1
解决办法
2164
查看次数

在浏览器中显示致命/通知错误

好吧,我刚开始使用hhvm/hack.但是我想向浏览器显示错误,但没有让它工作.

我按照以下方式设置了ini设置

error_reporting(E_ALL);
ini_set('display_errors', '1');
Run Code Online (Sandbox Code Playgroud)

根据var_dump ini_get的值设置为

string(5) "32767"
string(1) "1"
Run Code Online (Sandbox Code Playgroud)

但是当我这样做的时候

<?hh

error_reporting(E_ALL);
ini_set('display_errors', '1');

throw new InvalidArgumentException('test');
Run Code Online (Sandbox Code Playgroud)

当我通过浏览器访问页面时,我会得到一个白色屏幕和一个500 http头.所以没有解释致命/异常错误.

然而,我会通过终端hhvm index.php它会显示;

Fatal error: Uncaught exception 'InvalidArgumentException' with message 'test' in /var/www/public/index.php:3
Stack trace:
#0 {main}
Run Code Online (Sandbox Code Playgroud)

所以现在问题.怎么来我在浏览器中没有收到任何消息,但在cli中做什么?第二个是,我如何让它在浏览器中工作以显示消息.

我遇到了这个问题这个问题.但第一个,好的是相同的,但是没有答案.第二个是关于静态检查的说法.IE给出了一个int等,至少这是我认为他的意思.

我来的其他问题,看起来像我的,但又没有答案.

根据文档,它应该工作,我猜.

阅读更多关于我遇到的文档

尽管display_errors可以在运行时设置(使用函数ini_set()),但如果脚本存在致命错误,则不会产生任何影响.这是因为未执行所需的运行时操作.

所以我认为异常是一个致命的错误,所以我就这么做了 $test = $bar + 1;

这让cli来了

Notice: Undefined variable: bar in /var/www/public/index.php on line 8
int(1)
Run Code Online (Sandbox Code Playgroud)

再次在浏览器中

int(1) 
Run Code Online (Sandbox Code Playgroud)

所以我也没有收到通知.

当我重新启动hhvm时,service hhvm restart我也收到错误消息 …

hhvm

8
推荐指数
1
解决办法
3722
查看次数

hacklang的形状

我今天开始学习hacklang,现在我有点卡在形状上:http: //docs.hhvm.com/manual/en/hack.shapes.php

我理解形状的概念,它似乎对我很有用,但我无法理解为什么例如这段代码不会抛出任何错误:

<?hh

type Point2D = shape('x' => int, 'y' => int);

function dotProduct(Point2D $a, Point2D $b): int {
    return $a['x'] * $b['x'] + $a['y'] * $b['y'];
}

function main_sse(): void {
    echo dotProduct(shape('x' => 3, 'y' => 'this should cause an fatal error?'), shape('x' => 4, 'y' => 4));
}

main_sse();
Run Code Online (Sandbox Code Playgroud)

'y'键定义为整数,但是当我传递一个字符串时,不会显示错误.谢谢你的帮助 :)

hhvm hacklang

8
推荐指数
1
解决办法
2852
查看次数

用Apache 2.4配置HHVM 3.7给了我一个404?

我似乎无法配置HHVM和Apache,它一直给我一个404文件未找到错误.我的网站配置文件保存为www.example.com.conf,它包含:

<VirtualHost *:80>
        ServerName website.com
        ServerAdmin mail@website.com

        DocumentRoot /var/www/website.com/public_html/
        ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/website.com.com/public_html/$1

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

请注意,我删除了我的实际网站名称,但它是针对子域名的,所以就是这样:subdomain.xyz.com.我已经尝试过如何解决这个问题,但无论我尝试过什么似乎都不起作用; 甚至人们在官方存储库上发布的GitHub问题似乎也不起作用.我也没有更改默认的apache配置,我唯一改变的是我的网站的根目录,它完成了上面配置文件中的目录.

有任何想法吗?谢谢.

php apache hhvm

8
推荐指数
1
解决办法
722
查看次数

docker"无法找到替代的telinit实现来生成"

我是一个MAC用户,并在VM"ubuntu 14.04"中安装了docker.(我手动安装了一切,使用docker工具箱)

问题是当我启动特定容器(其他容器正常运行)时,它给了我这个奇怪的错误消息" 无法找到替代的telinit实现来生成 ".

这是我用来构建映像的Dockerfile:

FROM diegomarangoni/hhvm:cli

# install php composer.
# It needs git and the PHP zip extension
# zlib1g-dev is needed to compile the PHP zip extension
# openssh-client provides ssh-keyscan
RUN apt-get update \
    && apt-get install --assume-yes --no-install-recommends curl git zlib1g-dev openssh-client \
    && apt-get clean && rm -r /var/lib/apt/lists/* \
    && curl -sS https://getcomposer.org/installer -o installer \
    && hhvm -v ResourceLimit.SocketDefaultTimeout=30 -v Http.SlowQueryThreshold=30000 installer \
    && mv composer.phar /usr/local/bin/composer \
    && …
Run Code Online (Sandbox Code Playgroud)

hhvm docker ubuntu-14.04 docker-compose

8
推荐指数
1
解决办法
2万
查看次数