分享五个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 相关文章推荐
web方式ftp
Oct 09 PHP
php获取后台Job管理的实现代码
Jun 10 PHP
探讨GDFONTPATH能否被winxp下的php支持
Jun 21 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
Jan 31 PHP
phpnow php探针环境检测代码
Nov 04 PHP
php中实现获取随机数组列表的自定义函数
Apr 02 PHP
php使用Session和文件统计在线人数
Jul 04 PHP
php判断当前操作系统类型
Oct 28 PHP
php实现水印文字和缩略图的方法示例
Dec 29 PHP
PHP登录(ajax提交数据和后台校验)实例分享
Dec 29 PHP
Laravel获取所有的数据库表及结构的方法
Oct 10 PHP
PHP number_format函数原理及实例解析
Jul 14 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
拼音码表的生成
2006/10/09 PHP
使用php4加速网络传输
2006/10/09 PHP
php出现Cannot modify header information问题的解决方法大全
2008/04/09 PHP
php fsockopen解决办法 php实现多线程
2014/01/20 PHP
PHP连接MySQL的2种方法小结以及防止乱码
2014/03/11 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
php获取手机端的号码以及ip地址实例代码
2018/09/12 PHP
JavaScript性能陷阱小结(附实例说明)
2010/12/28 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
2015/12/24 Javascript
详解Bootstrap四种图片样式
2016/01/04 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
关于foreach循环中遇到的问题小结
2017/05/08 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
jQuery实现颜色打字机的完整代码
2020/03/19 jQuery
微信小程序地图实现展示线路
2020/07/29 Javascript
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
跟老齐学Python之一个免费的实验室
2014/09/14 Python
利用python求解物理学中的双弹簧质能系统详解
2017/09/29 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
Python比较配置文件的方法实例详解
2019/06/06 Python
python ChainMap的使用和说明详解
2019/06/11 Python
PyQt5中向单元格添加控件的方法示例
2020/03/24 Python
Myprotein俄罗斯官网:欧洲第一运动营养品牌
2019/05/05 全球购物
电气自动化大学生求职信
2013/10/16 职场文书
kfc实习自我鉴定
2013/12/14 职场文书
电子信息科学专业自荐信
2014/01/30 职场文书
个人公开承诺书
2014/03/28 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
倡议书格式及范文
2015/04/29 职场文书
催款函怎么写
2015/06/24 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
公务员学习中国梦心得体会
2016/01/05 职场文书
2016年师德师风学习心得体会
2016/01/12 职场文书
基于flask实现五子棋小游戏
2021/05/25 Python
MyBatis-Plus 批量插入数据的操作方法
2021/09/25 Java/Android