分享五个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 相关文章推荐
超强分页类2.0发布,支持自定义风格,默认4种显示模式
Jan 02 PHP
php获取某个目录大小的代码
Sep 10 PHP
php feof用来识别文件末尾字符的方法
Aug 01 PHP
使用PHP实现密保卡功能实现代码<打包下载直接运行>
Oct 09 PHP
php 解决旧系统 查出所有数据分页的类
Aug 27 PHP
php缓冲 output_buffering的使用详解
Jun 13 PHP
支持中文、字母、数字的PHP验证码
May 04 PHP
PHP中把有符号整型转换为无符号整型方法
May 27 PHP
PHP多维数组遍历方法(2种实现方法)
Dec 10 PHP
thinkPHP中验证码的简单使用方法
Dec 26 PHP
Paypal实现循环扣款(订阅)功能
Mar 23 PHP
PHP中file_put_contents追加和换行的实现方法
Apr 01 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
Home Coffee Roasting
2021/03/03 咖啡文化
php的字符串用法小结
2010/06/08 PHP
对PHP新手的一些建议(PHP学习经验总结)
2014/08/20 PHP
PHP使用glob函数遍历目录或文件夹的方法
2014/12/16 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
phpcms配置列表页以及获得文章发布时间
2017/07/04 PHP
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
Javascript 学习书 推荐
2009/06/13 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
javascript中的原型链深入理解
2014/02/24 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
js绑定事件和解绑事件
2017/04/27 Javascript
JS使用正则表达式获取小括号、中括号及花括号内容的方法示例
2018/06/01 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
2019/01/06 Javascript
vue使用exif获取图片经纬度的示例代码
2020/12/11 Vue.js
Vue-router中hash模式与history模式的区别详解
2020/12/15 Vue.js
python实现感知器
2017/12/19 Python
Python入门之后再看点什么好?
2018/03/05 Python
python如何使用unittest测试接口
2018/04/04 Python
利用pytorch实现对CIFAR-10数据集的分类
2020/01/14 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
python3中布局背景颜色代码分析
2020/12/01 Python
CSS3实现的闪烁跳跃进度条示例(附源码)
2013/08/19 HTML / CSS
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
就业推荐自我鉴定
2013/10/06 职场文书
怎么样写好简历中的自我评价
2013/10/25 职场文书
财务经理岗位职责
2013/11/09 职场文书
剪枝的学问教学反思
2014/02/07 职场文书
“学雷锋活动月”总结
2014/03/09 职场文书
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
公司放假通知范文
2015/04/14 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
超级实用!五步法则,教你写好年终工作总结
2019/12/05 职场文书
CSS3常见动画的实现方式
2021/04/14 HTML / CSS
Python实现为PDF去除水印的示例代码
2022/04/03 Python
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫