分享五个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.ini中文版(1)
Oct 09 PHP
使用PHP 5.0创建图形的巧妙方法
Oct 12 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
Jun 17 PHP
php根据身份证号码计算年龄的实例代码
Jan 18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
Jun 24 PHP
PHP也能干大事 随机函数
Apr 14 PHP
php生成固定长度纯数字编码的方法
Jul 09 PHP
浅谈php中的循环while、do...while、for、foreach四种循环
Nov 05 PHP
PHP实现的解汉诺塔问题算法示例
Aug 06 PHP
PHP数据对象映射模式实例分析
Mar 29 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
Oct 15 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 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本地服务器分享
2013/02/19 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
Docker搭建自己的PHP开发环境
2018/02/24 PHP
php命令行写shell实例详解
2018/07/19 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
2020/05/25 PHP
javascript 正则替换 replace(regExp, function)用法
2010/05/22 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
JavaScript编写检测用户所使用的浏览器的代码示例
2016/05/05 Javascript
原生js实现class的添加和删除简单代码
2016/07/12 Javascript
基于jQuery ligerUI实现分页样式
2016/09/18 Javascript
JS中用try catch对代码运行的性能影响分析
2016/12/26 Javascript
jQuery文字轮播特效
2017/02/12 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
2017/07/10 Javascript
jQuery ajax读取本地json文件的实例
2017/10/31 jQuery
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
[53:13]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-GAMING
2014/05/22 DOTA
浅析使用Python操作文件
2017/07/31 Python
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
xadmin使用formfield_for_dbfield函数过滤下拉表单实例
2020/04/07 Python
python中关于数据类型的学习笔记
2020/07/19 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
数据库基础的一些面试题
2012/02/25 面试题
党员自我剖析材料(群众路线)
2014/10/06 职场文书
宾馆客房管理制度
2015/08/06 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
2016小学优秀教师先进事迹材料
2016/02/26 职场文书
2016年学校“3.12”植树节活动总结
2016/03/16 职场文书
创业计划书之甜品店
2019/09/18 职场文书
python实现简单的名片管理系统
2021/04/26 Python