分享五个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下MYSQL limit的优化
Jan 10 PHP
php数字转汉字代码(算法)
Oct 08 PHP
PHP 常用数组内部函数(Array Functions)介绍
Jun 05 PHP
浅析php插件 Simple HTML DOM 用DOM方式处理HTML
Jul 01 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
Jun 19 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
Nov 18 PHP
PHP使用数组依次替换字符串中匹配项
Jan 08 PHP
php阳历转农历优化版
Aug 08 PHP
cakephp常见知识点汇总
Feb 24 PHP
PHP编程获取音频文件时长的方法【基于getid3类】
Apr 20 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 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循环获取GET和POST值的代码
2008/04/09 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
thinkPHP5.0框架安装教程
2017/03/25 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
PHP PDOStatement::debugDumpParams讲解
2019/01/30 PHP
jQuery版仿Path菜单效果
2011/12/15 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
vue 路由懒加载中给 Webpack Chunks 命名的方法
2020/04/24 Javascript
JavaScript使用setTimeout实现倒计时效果
2021/02/19 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
PIL对上传到Django的图片进行处理并保存的实例
2019/08/07 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
详解Python中string模块除去Str还剩下什么
2020/11/30 Python
解决python 执行shell命令无法获取返回值的问题
2020/12/05 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
2021/01/06 Python
iRobot官网:改变生活的家用机器人品牌
2016/09/20 全球购物
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
美国儿童玩具、装扮和玩偶商店:Magic Cabin
2018/09/02 全球购物
马来西亚在线健康商店:Medipal Malaysia
2020/04/13 全球购物
Hurley官方网站:扎根于海滩生活方式的全球青年文化品牌
2020/05/18 全球购物
基层党建工作宣传标语
2014/06/24 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
测量员岗位职责
2015/02/14 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书
超级实用的公文标题大全!
2019/07/19 职场文书
读后感怎么写?书写读后感的基本技巧!
2019/12/10 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android
APP界面设计技巧和注意事项
2022/04/29 杂记
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python