分享五个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 相关文章推荐
模拟OICQ的实现思路和核心程序(一)
Oct 09 PHP
PHP 用数组降低程序的时间复杂度
Dec 04 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
Nov 29 PHP
php摘要生成函数(无乱码)
Feb 04 PHP
php+iframe实现隐藏无刷新上传文件
Feb 10 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
Jun 23 PHP
php rsa加密解密使用详解
Jan 14 PHP
PHP时间类完整实例(非常实用)
Dec 25 PHP
PHP数组游标实现对数组的各种操作详解
Jan 26 PHP
理解php依赖注入和控制反转
May 11 PHP
php 防止表单重复提交两种实现方法
Nov 03 PHP
thinkphp5 + ajax 使用formdata提交数据(包括文件上传) 后台返回json完整实例
Mar 02 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 array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
destoon数据库表说明汇总
2014/07/15 PHP
Yii2实现同时搜索多个字段的方法
2016/08/10 PHP
php实现URL加密解密的方法
2016/11/17 PHP
PHP常见的几种攻击方式实例小结
2019/04/29 PHP
PHP常量及变量区别原理详解
2020/08/14 PHP
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
如何用js 实现依赖注入的思想,后端框架思想搬到前端来
2015/08/03 Javascript
详解jQuery中的元素的属性和相关操作
2015/08/14 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
DeviceOne 让你一见钟情的App快速开发平台
2016/02/17 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
详解Vue 事件驱动和依赖追踪
2017/04/22 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
NodeJS安装图文教程
2018/04/19 NodeJs
微信小程序实现选项卡效果
2018/11/06 Javascript
刷新页面后让控制台的js代码继续执行
2019/09/20 Javascript
微信小程序纯文本实现@功能
2020/04/08 Javascript
Python 初始化多维数组代码
2008/09/06 Python
下载糗事百科的内容_python版
2008/12/07 Python
python使用datetime模块计算各种时间间隔的方法
2015/03/24 Python
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
python利用openpyxl拆分多个工作表的工作簿的方法
2019/09/27 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
路易威登和香奈儿手袋:LuxeDH
2017/01/12 全球购物
Linux机考试题
2015/07/17 面试题
生日寿宴答谢词
2014/01/19 职场文书
《最佳路径》教学反思
2014/04/13 职场文书
企业标语大全
2014/07/01 职场文书
解除劳动合同协议书(样本)
2014/10/02 职场文书
2015关爱留守儿童工作总结
2014/12/12 职场文书
学年个人总结范文
2015/03/05 职场文书
监守自盗观后感
2015/06/10 职场文书
学校2016年圣诞节活动总结
2016/03/31 职场文书