分享五个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 相关文章推荐
论坛头像随机变换代码
Oct 09 PHP
PHP 向右侧拉菜单实现代码,测试使用中
Nov 03 PHP
探讨PHP调用时间格式的参数详解
Jun 06 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
Jan 03 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
Oct 15 PHP
php随机取mysql记录方法小结
Dec 27 PHP
php实现的一个简单json rpc框架实例
Mar 30 PHP
php按单词截取字符串的方法
Apr 07 PHP
微信支付PHP SDK之微信公众号支付代码详解
Dec 09 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
Dec 28 PHP
php使用Jpgraph创建3D饼形图效果示例
Feb 15 PHP
PHP lcfirst()函数定义与用法
Mar 08 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
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
2019/10/08 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
JavaScript 函数惰性载入的实现及其优点介绍
2013/08/12 Javascript
简单实用的全选反选按钮例子
2013/10/18 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
jQuery插件uploadify实现ajax效果的图片上传
2016/06/18 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
jquery实现弹窗功能(窗口居中显示)
2017/02/27 Javascript
谈谈对vue响应式数据更新的误解
2017/08/01 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
2017/11/02 Javascript
详解angularjs实现echart图表效果最简洁教程
2017/11/29 Javascript
AngularJS2 与 D3.js集成实现自定义可视化的方法
2017/12/01 Javascript
js最简单的双向绑定实例讲解
2018/01/02 Javascript
你可能不知道的前端算法之文字避让(inMap)
2018/01/12 Javascript
详解js的作用域、预解析机制
2018/02/05 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
jquery 时间戳转日期过程详解
2019/10/12 jQuery
[06:13]DOTA2进化论(修改版)
2013/10/08 DOTA
Python中无限元素列表的实现方法
2014/08/18 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
pycharm新建一个python工程步骤
2019/07/16 Python
python Kmeans算法原理深入解析
2019/08/23 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
法国在线药房:1001Pharmacies
2021/03/07 全球购物
介绍一下SQL注入攻击的种类和防范手段
2012/02/18 面试题
早会主持词
2014/03/17 职场文书
用基于python的appium爬取b站直播消费记录
2021/04/17 Python
Ruby处理YAML和json数据
2022/04/18 Ruby
vue使用element-ui按需引入
2022/05/20 Vue.js
nginx七层负载均衡配置详解
2022/07/15 Servers