分享五个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
在PHP中养成7个面向对象的好习惯
Jan 28 PHP
PHP中防止SQL注入攻击和XSS攻击的两个简单方法
Apr 15 PHP
php统计文件大小,以GB、MB、KB、B输出
May 29 PHP
PHP关联数组的10个操作技巧
Jan 21 PHP
ueditor 1.2.6 使用方法说明
Jul 24 PHP
PHP编程风格规范分享
Jan 15 PHP
smarty内置函数section的用法
Jan 22 PHP
php获取网站百度快照日期的方法
Jul 29 PHP
thinkPHP下的widget扩展用法实例分析
Dec 26 PHP
对比分析php中Cookie与Session的异同
Feb 19 PHP
PHP使用imagick扩展实现合并图像的方法
Apr 25 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超牛逼无限极分类生成树方法
2015/05/11 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
检测input每次的输入是否合法遇到汉字输入就有问题
2012/05/23 Javascript
js实现微信分享代码
2020/10/11 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
使用JS中的exec()方法构造正则表达式验证
2016/08/01 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
jQuery在ie6下无法设置select选中的解决方法详解
2016/09/20 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
2018/05/01 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
2018/08/27 Javascript
JavaScript数组方法的错误使用例子
2018/09/13 Javascript
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
vue router 用户登陆功能的实例代码
2019/04/24 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
[01:10]DOTA2次级职业联赛 - U5战队宣传片
2014/12/01 DOTA
Python的Flask框架的简介和安装方法
2015/11/13 Python
Python入门_浅谈for循环、while循环
2017/05/16 Python
Python 自动化表单提交实例代码
2017/06/08 Python
python urllib urlopen()对象方法/代理的补充说明
2017/06/29 Python
Python学习笔记之函数的定义和作用域实例详解
2019/08/13 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
python基于opencv实现人脸识别
2021/01/04 Python
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
西班牙创意礼品和小工具网上商店:Curiosite
2016/07/26 全球购物
洲际酒店集团大中华区:IHG中国
2016/08/17 全球购物
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
人事档案接收函
2014/01/12 职场文书
汽车队司机先进事迹材料
2014/02/01 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
五年级语文教学反思
2016/03/03 职场文书
python小型的音频操作库mp3Play
2022/04/24 Python