2019独角兽企业重金招聘Python工程师标准>>>

PHP7与HHVM

提到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源自动安装文件

# CentOS 6 / 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倍。

转载于:https://my.oschina.net/u/3585265/blog/3013463

PHP7通过yum源安装及性能测试相关推荐

  1. centos mysql安装_mysql yum源安装

    部署服务器环境的时候经常要安装mysql,以下是常见的安装方式 源码安装 rpm包安装 yum源安装 这篇主要介绍yum源安装. yum源下载 进入 https://dev.mysql.com/dow ...

  2. Centos7使用yum源安装mysql5.7和redis

    Centos7使用yum源安装mysql5.7 Centos7使用yum源安装redis windows安装mysql5.7 RPM是什么: RPM 是 LINUX 下的一种软件的可执行程序,你只要安 ...

  3. 阿里云yum源安装SVN失败的问题

    阿里云yum源安装svn一直报错 一直无法连接 http://mirrors.cloud.aliyuncs.com 配置163yum源 1,进入yum源配置目录 cd /etc/yum.repos.d ...

  4. Centos 利用yum源安装 nginx stream模块

    环境 CentOS 7.9 (腾讯云服务器) nginx 1.20.1 配置stream参考这里. nginx 动态模块 nginx 1.9.11 开始增加加载动态模块支持,从此不再需要替换nginx ...

  5. mysql repos_mysql yum源安装

    部署服务器环境的时候经常要安装mysql,以下是常见的安装方式 源码安装 rpm包安装 yum源安装 这篇主要介绍yum源安装. yum源下载 进入https://dev.mysql.com/down ...

  6. centos 安装mysql客户端_linux下mysql的yum源安装/配置/卸载

    yum源安装 解决:赋予root权限 首先停止MySQL服务:service mysqld stop 加参数启动mysql:/usr/bin/mysqld_safe --skip-grant-tabl ...

  7. mysql安装无效安装源_(0.2.4)Mysql安装——yum源安装

    转自:https://www.cnblogs.com/jimboi/p/6405560.html 1.下载好对应版本的yum源文件 2.安装用来配置mysql的yum源的rpm包 可以用: yum r ...

  8. RedHat7使用yum源安装依赖包

    由于Redhat版本的linux不能免费使用yum源安装依赖包,这导致不能愉快的安装Oracle的相关产品,本文就介绍一下如何在Redhat7上配置yum源 首先查看一下Redhat7默认安装的yum ...

  9. Centos中下载yum源安装sl实现跑火车

    Centos中下载yum源安装sl实现跑火车 描述 sl命令不同于ls命令,sl命令是以动画形式呈现小火车的趣味性命令,虽无实用价值,但亦可陶冶情操,愉悦心情. 安装 ##下载yum源(Centos ...

  10. Linux 通过yum源安装subversion(svn)服务端

    目录 前言 通过yum源安装subversion(svn)服务端 基本的SVN服务端配操作 确定一个SVN目录 新建SVN仓库 给SVN仓库添加用户 给SVN仓库的用户授权 SVN仓库配置 启动服务器 ...

最新文章

  1. 二十二:制作app的时候超出部分不能滑动
  2. 油管网红AI老师人设崩了:搞培训货不对板,谈退钱一律拉黑
  3. Openlayers中使用Cluster实现点位元素重合时动态聚合与取消聚合
  4. 27 CO配置-控制-产品成本控制-成本对象控制-期末结算-定义评估方法(实际成本)
  5. 《数源思维》提问工具之“语法套”
  6. 在苹果Mac中开启通用控制的方法
  7. 程序员30多岁了还单身的原因
  8. 形态学滤波对图像进行边缘及角点检测
  9. 首席赚钱源码(外卖券+电影+淘宝客+提现裂变流量主)功能强大
  10. 51单片机电路原理图_51单片机AD转换电路设计实现
  11. C语言中关于二级指针的笔试题
  12. 两张ID卡,完美消除互相干扰合二为一,实现“一卡”正反两用。
  13. 关于Xcode修改APP名称
  14. 菜鸟应用-手机应用在线制作平台,手机应用,APP开发,手机软件开发
  15. 电脑进不了,电脑进不了系统,详细教您怎么解决电脑进不了系统
  16. 贪婪洞窟2一直显示连接服务器失败,贪婪洞窟2公测服务器应急情况处理公告
  17. python中dic.get用法
  18. R语言入门代码(二)for循环的理解
  19. 网络服务器怎么修改ip,怎么改变自己的IP地址?
  20. 收银管理系统怎么选?哪个牌子好用?这篇干货一次性说明白!

热门文章

  1. MVC视图与控制器分离简单描述
  2. TCP/IP长连接和短连接
  3. [转载]下载rtmpe协议的视频文件
  4. 【Matlab学习笔记】【图像滤波去噪】中值滤波
  5. 英文字母信息熵与冗余度计算Python实现
  6. Python因数分解
  7. 如何下载并使用别人写的库——jupyter notebook
  8. 遥感数字图像处理——第三章——空间域处理方法
  9. 国内外网站服务器研究现状,国内地学科普网站现状研究
  10. chrome如何调试html,如何用firefox或chrome浏览器调试js和jquery程序