PHP7通过yum源安装及性能测试

提到PHP,肯定会有人说这是世界上最好的编程语言。单说流行程度,目前全球超过81.7%的服务器后端都采用了PHP语言,它驱动着全球超过2亿多个网站。上月初PHP7正式版发布,迎来自2004年以来最大的版本更新。现在PHP 7.0正式发布。

对于普通的PHP网站,主要是IO密集型的,瓶颈在MySQL数据之上,体现不出来PHP性能的劣势。但在密集计算方面比C、C++、Java这种静态编译型语言差几十倍甚至上百倍。如果在PHP开发中使用了比较复杂的框架,如symfony,程序性能会明显下降。事实上,PHP语言最初的设计,就不是用来解决计算密集型的应用场景。我们可以这样粗略理解为,PHP为了提升开发效率,而牺牲了执行效率。

但PHP比较流行,如新浪微博、Facebook这种大型网站大部分程序都是使用PHP写的,也就是在这种大规模应用下,PHP性能低下就显现出来了。Facebook早期的很多代码是使用PHP来开发的,但是,随着业务的快速发展,PHP执行效率成为越来越明显的问题。为了优化执行效率,Facebook在2008年就开始使用HipHop,这是一种PHP执行引擎,最初是为了将Fackbook的大量PHP代码转成 C++,以提高性能和节约资源。使用HipHop的PHP代码在性能上有数倍的提升。后来,Facebook将HipHop平台开源,逐渐发展为现在的HHVM。HHVM用来替换PHP自身使用的引擎Zend Engine。据说性能提升了70%。当然PHP官方也知道PHP最大的短板,于是推出了PHP7项目,主要是重构了Zend Engine引擎。

PHP7最显著的变化就是性能的极大提升,已接近Facebook开发的PHP执行引擎HHVM。在WordPress基准性能测试中,速度比5.6版本要快2~3倍,大大减少了内存占用。PHP7在语言上也有一些变化,比如添加返回类型声明、增加了一些新的保留关键字等。在安全方面,去除了PHP安全模式,添加魔术引号等。不仅如此,新版还支持64位,而且包含最新版Zend引擎。其实PHP7的在真实场景的性能确实已经和HHVM相当,在一些场景甚至超过了HHVM。但HHVM的运维复杂, 是多线程模型, 这就代表着如果一个线程导致crash了, 那么整个服务就挂了, 并且它不会自动重启。另外它采用JIT, 那么意味着, 重启以后要预热, 没有预热的情况下, 性能较为糟糕。并且多线程模型调试困难, 这对于追求稳定来说的Web服务来说, 是非常不适合的。

YUM安装PHP7

想使用最新版PHP,就需要使用到REMI源,Remi repository是包含最新版本PHP和MySQL包的Linux源,由Remi提供维护。有个这个源之后,使用YUM安装或更新PHP、MySQL较新版本了。

安装最新的Remi源自动安装文件

#CentOS6 / RHEL 6

yum install http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

# CentOS 7 / RHEL 7

yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

安装PHP相关组件,下面提供的是一个生产环境中可以使用的标配安装。

$ yum --enablerepo=remi,remi-php70 install

php \

php-cgi \

php-cli \

php-fpm \

php-common \

php-devel \

php-mysqlnd \

php-mysql \

php-sqlite3 \

php-mbstring \

php-msgpack \

php-mcrypt \

php-bcmath \

php-gd \

php-xml \

php-ldap \

php-xmlrpc \

php-opcache \

php-curl \

php-json \

php-odbc \

php-pdo \

php-bz2 \

php-xml \

php-ftp \

php-imap \

php-snmp \

php-redis \

php-memcached

查看PHP版本

$ php -v

PHP 7.0.9 (cli) (built: Jul 20 2016 18:08:08) ( NTS )

启动PHP-FPM

$ service php-fpm start

到这里,PHP7.0就安装完成了。如果需要用到PHP扩展功能,如redis、memcached等,只需要也使用YUM安装即可,如下:

$ yum --enablerepo=remi,remi-php70 install php-redis php-memcached

如果在REMI或EPEL源中都找不到你需要的扩展模块,那么就需要手动编译安装了,也很简单。

另外查看PHP模块信息使用php -m命令。

$ php -m | grep redis

redis

安装一套LNMP参考:LNMP安装包部署实战或者参考PHP7.0版本的LNMPZabbix 3.0安装使用详解

PHP7性能测试

环境:4核 CPU,内存4G,操作系统Centos 6.5。

首先说一点GCC编译器的建议,据鸟哥建议,使用新一点的编译器,推荐 GCC 4.8以上,因为只有GCC 4.8以上PHP才会开启Global Register for opline and execute_data支持, 这个会带来5%左右的性能提升。

写一段程序(网上提供的简单测试方法):

第一段,生成一个 60 万元素的数组,通过查找key 的方式,来确定key是否存在。

< ?php

$a = array();

for($i=0;$i<600000;$i++){

  $a[$i] = $i;

}

foreach($a as $i)

{

array_key_exists($i, $a);

}

首先是PHP 5.3.17版。

[root@localhost test]# time php search_by_key.php

real 0m0.389s

user 0m0.337s

sys  0m0.051s

[root@localhost test]# time php search_by_key.php

real 0m0.378s

user 0m0.308s

sys  0m0.062s

[root@localhost test]# time php search_by_key.php

real 0m0.378s

user 0m0.317s

sys  0m0.061s

其次是PHP 7.0版本。

[root@localhost php7]# time php7 search_by_key.php

real 0m0.082s

user 0m0.066s

sys  0m0.014s

[root@localhost php7]# time php7 search_by_key.php

real 0m0.080s

user 0m0.058s

sys  0m0.021s

[root@localhost php7]# time php7 search_by_key.php

real 0m0.080s

user 0m0.053s

sys  0m0.026s`

响应时间在PHP7下运行变为原来的1/4。

还是上面的这个方式,不过由于速度较慢,所以变成了一个60000个元素的数组,查找值。

< ?php

$a = array();

for($i=0;$i<600000;$i++){

  $a[$i] = $i;

}

foreach($a as $i)

{

array_key_exists($i, $a);

}

[root@localhost test]# time php search_by_val.php

real 0m24.296s

user 0m24.184s

sys  0m0.025s

[root@localhost test]# time php search_by_val.php

real 0m25.523s

user 0m25.317s

sys  0m0.026s

[root@localhost test]# time php search_by_val.php

real 0m26.026s

user 0m25.478s

sys  0m0.092s

等待的时间,总是觉得很漫长,三次测试,花掉了75秒多。下面,PHP 7 登场了。

[root@localhost php7]# time php7 search_by_val.php

real 0m3.362s

user 0m3.323s

sys  0m0.007s

[root@localhost php7]# time php7 search_by_val.php

real 0m3.266s

user 0m3.251s

sys  0m0.004s

[root@localhost php7]# time php7 search_by_val.php

real 0m3.290s

user 0m3.275s

sys  0m0.006s

有没有!速度整整提高了将近7倍。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容