分享五个PHP7性能优化提升技巧


Posted in PHP onDecember 07, 2015

PHP7已经发布了, 作为PHP10年来最大的版本升级, 最大的性能升级, PHP7在多放的测试中都表现出很明显的性能提升, 然而, 为了让它能发挥出最大的性能, 我还是有几件事想提醒下.

分享五个PHP7性能优化提升技巧

1. Opcache

记得启用Zend Opcache, 因为PHP7即使不启用Opcache速度也比PHP-5.6启用了Opcache快, 所以之前测试时期就发生了有人一直没有启用Opcache的事情. 启用Opcache非常简单, 在php.ini配置文件中加入:

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1"

2. 使用新的编译器

使用新一点的编译器, 推荐GCC 4.8以上, 因为只有GCC 4.8以上PHP才会开启Global Register for opline and execute_data支持, 这个会带来5%左右的性能提升(Wordpres的QPS角度衡量)

其实GCC 4.8以前的版本也支持, 但是我们发现它支持的有Bug, 所以必须是4.8以上的版本才会开启这个特性.

3. HugePage

我之前的文章也介绍过: 让你的PHP7更快之Hugepage , 首先在系统中开启HugePages, 然后开启Opcache的huge_code_pages.

以我的CentOS 6.5为例, 通过:

$sudo sysctl vm.nr_hugepages=512

分配512个预留的大页内存:

$ cat /proc/meminfo | grep Huge
AnonHugePages: 106496 kB
HugePages_Total: 512
HugePages_Free: 504
HugePages_Rsvd: 27
HugePages_Surp: 0
Hugepagesize: 2048 kB

然后在php.ini中加入:

 opcache.huge_code_pages=1

这样一来, PHP会把自身的text段, 以及内存分配中的huge都采用大内存页来保存, 减少TLB miss, 从而提高性能.

4. Opcache file cache

开启Opcache File Cache(实验性), 通过开启这个, 我们可以让Opcache把opcode缓存缓存到外部文件中, 对于一些脚本, 会有很明显的性能提升.
在php.ini中加入:

opcache.file_cache=/tmp

这样PHP就会在/tmp目录下Cache一些Opcode的二进制导出文件, 可以跨PHP生命周期存在.

5. PGO

我之前的文章: 让你的PHP7更快(GCC PGO) 也介绍过, 如果你的PHP是专门为一个项目服务, 比如只是为你的Wordpress, 或者drupal, 或者其他什么, 那么你就可以尝试通过PGO, 来提升PHP, 专门为你的这个项目提高性能.

具体的, 以wordpress 4.1为优化场景.. 首先在编译PHP的时候首先:

$ make prof-gen

然后用你的项目训练PHP, 比如对于Wordpress:

$ sapi/cgi/php-cgi -T 100 /home/huixinchen/local/www/htdocs/wordpress/index.php >/dev/null

也就是让php-cgi跑100遍wordpress的首页, 从而生成一些在这个过程中的profile信息.

最后:

$ make prof-clean
$ make prof-use && make install

这个时候你编译得到的PHP7就是为你的项目量身打造的最高性能的编译版本.

暂时就这么多吧, 以后想起来再加, 欢迎大家尝试, thanks

以上三水点靠木小编给大家分享五个PHP7性能优化提升技巧,希望大家喜欢。

PHP 相关文章推荐
Windows下PHP5和Apache的安装与配置
Sep 05 PHP
PHP下编码转换函数mb_convert_encoding与iconv的使用说明
Dec 16 PHP
简单的PHP缓存设计实现代码
Sep 30 PHP
解析:通过php socket并借助telnet实现简单的聊天程序
Jun 18 PHP
php中require和require_once的区别说明
Feb 27 PHP
PHP实现的连贯操作、链式操作实例
Jul 08 PHP
destoon数据库表说明汇总
Jul 15 PHP
php面向对象中static静态属性与方法的内存位置分析
Feb 08 PHP
php文件读取方法实例分析
Jun 20 PHP
Zend Framework教程之MVC框架的Controller用法分析
Mar 07 PHP
php数组冒泡排序算法实例
May 06 PHP
Yii2结合Workerman的websocket示例详解
Sep 10 PHP
学习php设计模式 php实现工厂模式(factory)
Dec 07 #PHP
学习php设计模式 php实现原型模式(prototype)
Dec 07 #PHP
PHP中Enum(枚举)用法实例详解
Dec 07 #PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
Dec 07 #PHP
学习php设计模式 php实现门面模式(Facade)
Dec 07 #PHP
php实现smarty模板无限极分类的方法
Dec 07 #PHP
学习php设计模式 php实现单例模式(singleton)
Dec 07 #PHP
You might like
PHP的explode和implode的使用说明
2011/07/17 PHP
PHP开发框架kohana中处理ajax请求的例子
2014/07/14 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
php cookie 详解使用实例
2016/11/03 PHP
php接口技术实例详解
2016/12/07 PHP
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
2019/05/13 PHP
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
Js注册协议倒计时的小例子
2013/06/24 Javascript
jQuery实现ichat在线客服插件
2014/12/29 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
2015/03/04 Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
2016/06/20 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
JS实现字符串翻转的方法分析
2018/08/31 Javascript
详解JavaScript 的变量
2019/03/08 Javascript
vue自定义正在加载动画的例子
2019/11/14 Javascript
vue实现拖拽进度条
2021/03/01 Vue.js
[01:02:53]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第二局
2016/03/06 DOTA
[01:04:31]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第二场 1月8日
2021/03/11 DOTA
Python创建系统目录的方法
2015/03/11 Python
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
win10环境下python3.5安装步骤图文教程
2017/02/03 Python
在pycharm中显示python画的图方法
2019/08/31 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
公司中秋节活动方案
2014/02/12 职场文书
电子商务专业应届毕业生求职信
2014/06/21 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
党员个人年度总结
2015/02/14 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
如何起草一份正确的合伙创业协议书?
2019/07/04 职场文书
OpenCV实现普通阈值
2021/11/17 Java/Android
python中的getter与setter你了解吗
2022/03/24 Python