分享五个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的配置文件php.ini
Oct 09 PHP
56.com视频采集接口程序(PHP)
Sep 22 PHP
PHP Document 代码注释规范
Apr 13 PHP
PHP 危险函数解释 分析
Apr 22 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
Dec 18 PHP
PHP通过串口实现发送短信
Jul 08 PHP
php获取英文姓名首字母的方法
Jul 13 PHP
功能强大的php分页函数
Jul 20 PHP
jquery不支持toggle()高(新)版本的问题解决
Sep 24 PHP
php微信扫码支付 php公众号支付
Mar 24 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
Apr 15 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
Oct 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
PHP垃圾回收机制简单说明
2010/07/22 PHP
Zend的AutoLoad机制介绍
2012/09/27 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
用于判断用户注册时,密码强度的JS代码
2009/01/01 Javascript
jQuery-ui中自动完成实现方法
2010/06/10 Javascript
jQuery Tools Dateinput使用介绍
2012/07/14 Javascript
基于jquery打造的百分比动态色彩条插件
2012/09/19 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
JavaScript中的await/async的作用和用法
2016/10/31 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
2016/11/22 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
vue跨域解决方法
2017/10/15 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
解决VUE中document.body.scrollTop为0的问题
2018/09/15 Javascript
微信小程序使用wxParse解析html的方法示例
2019/01/17 Javascript
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
使用vuex较为优雅的实现一个购物车功能的示例代码
2019/12/09 Javascript
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
Python多线程结合队列下载百度音乐的方法
2015/07/27 Python
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
python调用java的jar包方法
2018/12/15 Python
基于Python中的yield表达式介绍
2019/11/19 Python
细说NumPy数组的四种乘法的使用
2020/12/18 Python
英国著名的化妆品折扣网站:Allbeauty.com
2016/07/21 全球购物
中学教师培训制度
2014/01/31 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
公司股东合作协议书
2014/09/14 职场文书
三下乡活动心得体会
2016/01/23 职场文书
2016年社区综治宣传月活动总结
2016/03/16 职场文书
原生JS封装vue Tab切换效果
2021/04/28 Vue.js
DQL数据查询语句使用示例
2022/12/24 MySQL