分享五个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 相关文章推荐
用Flash图形化数据(二)
Oct 09 PHP
E路文章系统PHP
Dec 11 PHP
linux下删除7天前日志的代码(php+shell)
Jan 02 PHP
php字符编码转换之gb2312转为utf8
Oct 28 PHP
php读取excel文件示例分享(更新修改excel)
Feb 27 PHP
JavaScript创建命名空间的5种写法
Jun 24 PHP
PHP调试的强悍利器之PHPDBG
Feb 22 PHP
自制PHP框架之路由与控制器
May 07 PHP
PHP实现的redis主从数据库状态检测功能示例
Jul 20 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 PHP
Laravel路由研究之domain解决多域名问题的方法示例
Apr 04 PHP
通过代码实例解析PHP session工作原理
Dec 11 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
再说下636单管机
2021/03/02 无线电
我的论坛源代码(三)
2006/10/09 PHP
CI框架自动加载session出现报错的解决办法
2014/06/17 PHP
php中字符串和正则表达式详解
2014/10/23 PHP
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
jquery Ajax 实现加载数据前动画效果的示例代码
2014/02/07 Javascript
使用纯javascript实现经典扫雷游戏
2015/04/23 Javascript
整理AngularJS中的一些常用指令
2015/06/16 Javascript
javascript生成大小写字母
2015/07/03 Javascript
基于replaceChild制作简单的吞噬特效
2015/09/21 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
jquery ajax异步提交表单数据的方法
2017/10/27 jQuery
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
JavaScript中的函数式编程详解
2020/08/22 Javascript
解决vant中 tab栏遇到的坑 van-tabs
2020/11/04 Javascript
JavaScript实现鼠标移入随机变换颜色
2020/11/24 Javascript
Python中replace方法实例分析
2014/08/20 Python
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
Pandas探索之高性能函数eval和query解析
2017/10/28 Python
Python基于最小二乘法实现曲线拟合示例
2018/06/14 Python
python实现数字炸弹游戏
2020/07/17 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
美国领先的宠物用品和宠物食品零售商:Petco
2020/10/28 全球购物
高中军训感言600字
2014/03/11 职场文书
安全生产目标管理责任书
2014/07/25 职场文书
护理目标管理责任书
2014/07/25 职场文书
2014年党总支工作总结
2014/12/18 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
运动与健康自我评价
2015/03/09 职场文书
教师节作文之小学四年级
2019/09/03 职场文书
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis
Django实现翻页的示例代码
2021/05/24 Python
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL