分享五个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 相关文章推荐
Mysql的GROUP_CONCAT()函数使用方法
Mar 28 PHP
PHP 基本语法格式
Dec 15 PHP
php htmlspecialchars加强版
Feb 16 PHP
php中is_null,empty,isset,unset 的区别详细介绍
Apr 28 PHP
php中的比较运算符详解
Oct 28 PHP
PHP的APC模块实现上传进度条
Oct 27 PHP
php mongodb操作类 带几个简单的例子
Aug 25 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
Feb 14 PHP
浅析PHP数据导出知识点
Feb 17 PHP
Yii框架数据库查询、增加、删除操作示例
Oct 14 PHP
详解laravel passport OAuth2.0的4种模式
Nov 04 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
Dec 29 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服务器实现多session并发运行
2006/10/09 PHP
PHP新手上路(七)
2006/10/09 PHP
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
PHP图像裁剪缩略裁切类源码及使用方法
2016/01/07 PHP
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
Javascript常用小技巧汇总
2015/06/24 Javascript
jQuery实现按钮的点击 全选/反选 单选框/复选框 文本框 表单验证
2015/06/25 Javascript
跟我学习javascript的执行上下文
2015/11/18 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
2016/08/01 Javascript
关于JavaScript和jQuery的类型判断详解
2016/10/08 Javascript
JS新包管理工具yarn和npm的对比与使用入门
2016/12/09 Javascript
详解webpack 入门与解析
2018/04/09 Javascript
如何为vuex实现带参数的 getter和state.commit
2019/01/04 Javascript
详解js根据百度地图提供经纬度计算两点距离
2019/05/13 Javascript
js实现随机div颜色位置 类似满天星效果
2019/10/24 Javascript
python Flask实现restful api service
2017/12/04 Python
python+mysql实现学生信息查询系统
2019/02/21 Python
python中for in的用法详解
2020/04/17 Python
python实现五子棋程序
2020/04/24 Python
英国知名奢侈品包包品牌:Milli Millu
2016/12/22 全球购物
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
shell的种类有哪些
2015/04/15 面试题
临床医学大学生求职信
2013/09/28 职场文书
大学生工作自荐书
2014/06/16 职场文书
专科生就业求职信
2014/06/22 职场文书
医学生求职信
2014/07/01 职场文书
2014年秋季新学期寄语
2014/08/02 职场文书
办护照工作证明
2014/10/01 职场文书
学校百日安全活动总结
2015/05/07 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
失恋33天观后感
2015/06/11 职场文书
Pyhton模块和包相关知识总结
2021/05/12 Python
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android