分享五个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 相关文章推荐
编写PHP的安全策略
Oct 09 PHP
实现 win2003 下 mysql 数据库每天自动备份
Dec 06 PHP
腾讯QQ php程序员面试题目整理
Jun 08 PHP
php下连接mssql2005的代码
Jan 17 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
Oct 25 PHP
php中smarty区域循环的方法
Jun 11 PHP
php实现的简单美国商品税计算函数
Jul 13 PHP
使用php+swoole对client数据实时更新(一)
Jan 07 PHP
必须收藏的php实用代码片段
Feb 02 PHP
thinkphp中的url跳转用法分析
Jul 12 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 PHP
laravel 事件/监听器实例代码
Apr 12 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命名空间(Namespace)的使用详解
2013/05/04 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
PHP实现对二维数组某个键排序的方法
2016/09/14 PHP
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
JQuery 无废话系列教程(一) jquery入门 [推荐]
2009/06/23 Javascript
TextArea 控件的最大长度问题(js json)
2009/12/16 Javascript
checkbox设置复选框的只读效果不让用户勾选
2013/08/12 Javascript
让checkbox不选中即将选中的checkbox不选中
2014/07/11 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
Bootstrap对话框使用实例讲解
2016/09/24 Javascript
jQuery绑定事件的四种方式介绍
2016/10/31 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
jQuery简单实现根据日期计算星期几的方法
2019/01/09 jQuery
如何从零开始手写Koa2框架
2019/03/22 Javascript
vue的列表交错过渡实现代码示例
2019/05/05 Javascript
layui 阻止图片上传的实例(before方法)
2019/09/26 Javascript
vue实现树形结构样式和功能的实例代码
2019/10/15 Javascript
JavaScript 实现下雪特效的示例代码
2020/09/09 Javascript
[59:15]EG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/29 DOTA
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
python 爬虫请求模块requests详解
2020/12/04 Python
美国在线纱线商店:Darn Good Yarn
2019/03/20 全球购物
Sony C++笔试题
2013/03/10 面试题
成人教育自我鉴定
2013/11/01 职场文书
中学教师教学工作总结
2015/08/13 职场文书
2015年小学体育教师工作总结
2015/10/23 职场文书
2016元旦晚会主持人开场白和结束语
2015/12/03 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android