分享五个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 Session变量不能传送到下一页的解决方法
Nov 27 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
Jan 16 PHP
关于PHPDocument 代码注释规范的总结
Jun 25 PHP
PHP迭代器的内部执行过程详解
Nov 12 PHP
ThinkPHP中的常用查询语言汇总
Aug 22 PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 PHP
php购物车实现方法
Jan 03 PHP
PHP实现HTTP断点续传的方法
Jun 17 PHP
php基于PDO连接MSSQL示例DEMO
Jul 13 PHP
PHP中递归的实现实例详解
Nov 14 PHP
PHP实现的XXTEA加密解密算法示例
Aug 28 PHP
PHP常量define和const的区别详解
May 18 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
zf框架的Filter过滤器使用示例
2014/03/13 PHP
php数组去除空值函数分享
2015/02/02 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
2019/05/08 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
PHP标准库 (SPL)――Countable用法示例
2020/06/05 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
jQuery截取指定长度字符串的实现原理及代码
2014/07/01 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
AngularJs $parse、$eval和$observe、$watch详解
2016/09/21 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
基于Node.js搭建hexo博客过程详解
2019/06/25 Javascript
微信小程序 网络通信实现详解
2019/07/23 Javascript
微信浏览器左上角返回按钮监听的实现
2020/03/04 Javascript
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
[37:29]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.19
2020/11/19 DOTA
用Python实现一个简单的线程池
2015/04/07 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
django框架模板语言使用方法详解
2019/07/18 Python
python列表的逆序遍历实现
2020/04/20 Python
Java byte数组操纵方式代码实例解析
2020/07/22 Python
美国专注于健康商品的网站:eVitamins
2017/01/23 全球购物
教师自荐书
2013/10/08 职场文书
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
优秀学生评语大全
2014/04/25 职场文书
六一儿童节演讲稿
2014/05/23 职场文书
村党的群众路线教育实践活动总结材料
2014/10/31 职场文书
教师辞职信范文
2015/02/28 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
新人入职感言
2015/07/31 职场文书
2015国庆节感想
2015/08/04 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书
初三化学教学反思
2016/02/22 职场文书