让你的 PHP 7 更快 GCC PGO
我们一直致力于提升PHP7的性能, 上个月我们注意到GCC的PGO能在Wordpress上能带来近10%的性能提升, 这个让我们很激动.
然而, PGO正如名字所说(Profile Guided Optimization 有兴趣的可以Google), 他需要用一些用例来获得反馈, 也就是说这个优化是需要和一个特定的场景绑定的.
你对一个场景的优化, 也许在另外一个场景就事与愿违了. 它不是一个通用的优化. 所以我们不能简单的就包含这些优化, 也无法直接发布PGO编译后的PHP7.
当然, 我们正在尝试从PGO找出一些共性的优化, 然后手工Apply到PHP7上去, 但这个很明显不能做到针对一个场景的特别优化所能达到的效果, 所以我决定写这篇文章简单介绍下怎么使用PGO来编译PHP7, 让你编译的PHP7能特别的让你自己的独立的应用变得更快.
首先, 要决定的就是拿什么场景去Feedback GCC, 我们一般都会选择: 在你要优化的场景中: 访问量最大的, 耗时最多的, 资源消耗最重的一个页面.
拿Wordpress为例, 我们选择Wordpress的首页(因为首页往往是访问量最大的).
我们以我的机器为例:
<ol> <li><span><span>Intel(R) Xeon(R) CPU X5687 @ 3.60GHz X 16(超线程), </span></span></li> <li><span> </span></li> <li><span>48G Memory </span></li> </ol>
php-fpm 采用固定32个worker, opcache采用默认的配置(一定要记得加载opcache)
以wordpress 4.1为优化场景..
首先我们来测试下目前WP在PHP7的性能(ab -n 10000 -c 100):
<ol> <li><span><span>$ ab -n 10000 -c 100 http:</span><span>//inf-dev-maybach.weibo.com:8000/wordpress/</span><span> </span></span></li> <li><span> </span></li> <li> <span>This is ApacheBench, Version 2.3 $Revision</span><span>: 655654 $> </span> </li> <li><span> </span></li> <li><span>Copyright 1996 Adam Twiss, Zeus Technology Ltd, http:<span>//www.zeustech.net/</span><span> </span></span></li> <li><span> </span></li> <li><span>Licensed to The Apache Software Foundation, http:<span>//www.apache.org/</span><span> </span></span></li> <li><span> </span></li> <li><span>Benchmarking inf-dev-maybach.weibo.com (be patient) </span></li> <li><span> </span></li> <li><span>Completed 1000 requests </span></li> <li><span> </span></li> <li><span>Completed 2000 requests </span></li> <li><span> </span></li> <li><span>Completed 3000 requests </span></li> <li><span> </span></li> <li><span>Completed 4000 requests </span></li> <li><span> </span></li> <li><span>Completed 5000 requests </span></li> <li><span> </span></li> <li><span>Completed 6000 requests </span></li> <li><span> </span></li> <li><span>Completed 7000 requests </span></li> <li><span> </span></li> <li><span>Completed 8000 requests </span></li> <li><span> </span></li> <li><span>Completed 9000 requests </span></li> <li><span> </span></li> <li><span>Completed 10000 requests </span></li> <li><span> </span></li> <li><span>Finished 10000 requests </span></li> <li><span> </span></li> <li><span>Server Software: nginx/1.7.12 </span></li> <li><span> </span></li> <li><span>Server Hostname: inf-dev-maybach.weibo.com </span></li> <li><span> </span></li> <li><span>Server Port: 8000 </span></li> <li><span> </span></li> <li><span>Document Path: /wordpress/ </span></li> <li><span> </span></li> <li><span>Document Length: 9048 bytes </span></li> <li><span> </span></li> <li><span>Concurrency Level: 100 </span></li> <li><span> </span></li> <li><span>Time taken <span>for</span><span> tests: 8.957 seconds </span></span></li> <li><span> </span></li> <li><span>Complete requests: 10000 </span></li> <li><span> </span></li> <li><span>Failed requests: 0 </span></li> <li><span> </span></li> <li><span>Write errors: 0 </span></li> <li><span> </span></li> <li><span>Total transferred: 92860000 bytes </span></li> <li><span> </span></li> <li><span>HTML transferred: 90480000 bytes </span></li> <li><span> </span></li> <li><span>Requests per second: 1116.48 [#/sec] (mean) </span></li> <li><span> </span></li> <li><span>Time per request: 89.567 [ms] (mean) </span></li> <li><span> </span></li> <li><span>Time per request: 0.896 [ms] (mean, across all concurrent requests) </span></li> <li><span> </span></li> <li><span>Transfer rate: 10124.65 [Kbytes/sec] received </span></li> </ol>
可见Wordpress 4.1 目前在这个机器上, 首页的QPS可以到1116.48. 也就是每秒钟可以处理这么多个对首页的请求,
现在, 让我们开始教GCC, 让他编译出跑Wordpress4.1更快的PHP7来, 首先要求GCC 4.0以上的版本, 不过我建议大家使用GCC-4.8以上的版本(现在都GCC-5.1了).
第一步, 自然是下载PHP7的源代码了, 然后做./configure. 这些都没什么区别
接下来就是有区别的地方了, 我们要首先第一遍编译PHP7, 让它生成会产生profile数据的可执行文件:
<ol><li><span><span>$ make prof-gen <br></span></span></li></ol>
注意, 我们用到了prof-gen参数(这个是PHP7的Makefile特有的, 不要尝试在其他项目上也这么搞哈 :) )
然后, 让我们开始训练GCC:
<ol><li><span><span>$ sapi/cgi/php-cgi -T </span><span>100</span><span> /home/huixinchen/local/www/htdocs/wordpress/index.php >/dev/</span><span>null</span><span> </span></span></li></ol>
也就是让php-cgi跑100遍wordpress的首页, 从而生成一些在这个过程中的profile信息.
然后, 我们开始第二次编译PHP7.
<ol> <li><span><span>$ make prof-clean </span></span></li> <li><span>$ make prof-<span>use</span><span> && make install </span></span></li> </ol>
好的, 就这么简单, PGO编译完成了, 现在我们看看PGO编译以后的PHP7的性能:
<ol> <li><span><span>$ ab -n10000 -c </span><span>100</span><span> http:</span><span>//inf-dev-maybach.weibo.com:8000/wordpress/</span><span> </span></span></li> <li><span> </span></li> <li><span>This is ApacheBench, Version <span>2.3</span><span> <span>655654</span><span> $> </span></span></span></li> <li><span> </span></li> <li><span>Copyright <span>1996</span><span> Adam Twiss, Zeus Technology Ltd, http:</span><span>//www.zeustech.net/</span><span> </span></span></li> <li><span> </span></li> <li><span>Licensed to The Apache Software Foundation, http:<span>//www.apache.org/</span><span> </span></span></li> <li><span> </span></li> <li><span>Benchmarking inf-dev-maybach.weibo.com (be patient) </span></li> <li><span> </span></li> <li><span>Completed <span>1000</span><span> requests </span></span></li> <li><span> </span></li> <li><span>Completed <span>2000</span><span> requests </span></span></li> <li><span> </span></li> <li><span>Completed <span>3000</span><span> requests </span></span></li> <li><span> </span></li> <li><span>Completed <span>4000</span><span> requests </span></span></li> <li><span> </span></li> <li><span>Completed <span>5000</span><span> requests </span></span></li> <li><span> </span></li> <li><span>Completed <span>6000</span><span> requests </span></span></li> <li><span> </span></li> <li><span>Completed <span>7000</span><span> requests </span></span></li> <li><span> </span></li> <li><span>Completed <span>8000</span><span> requests </span></span></li> <li><span> </span></li> <li><span>Completed <span>9000</span><span> requests </span></span></li> <li><span> </span></li> <li><span>Completed <span>10000</span><span> requests </span></span></li> <li><span> </span></li> <li><span>Finished <span>10000</span><span> requests </span></span></li> <li><span> </span></li> <li><span>Server Software: nginx/<span>1.7</span><span>.</span><span>12</span><span> </span></span></li> <li><span> </span></li> <li><span>Server Hostname: inf-dev-maybach.weibo.com </span></li> <li><span> </span></li> <li><span>Server Port: <span>8000</span><span> </span></span></li> <li><span> </span></li> <li><span>Document Path: /wordpress/ </span></li> <li><span> </span></li> <li><span>Document Length: <span>9048</span><span> bytes </span></span></li> <li><span> </span></li> <li><span>Concurrency Level: <span>100</span><span> </span></span></li> <li><span> </span></li> <li><span>Time taken <span>for</span><span> tests: </span><span>8.391</span><span> seconds </span></span></li> <li><span> </span></li> <li><span>Complete requests: <span>10000</span><span> </span></span></li> <li><span> </span></li> <li><span>Failed requests: <span>0</span><span> </span></span></li> <li><span> </span></li> <li><span>Write errors: <span>0</span><span> </span></span></li> <li><span> </span></li> <li><span>Total transferred: <span>92860000</span><span> bytes </span></span></li> <li><span> </span></li> <li><span>HTML transferred: <span>90480000</span><span> bytes </span></span></li> <li><span> </span></li> <li><span>Requests per second: <span>1191.78</span><span> [#/sec] (mean) </span></span></li> <li><span> </span></li> <li><span>Time per request: <span>83.908</span><span> [ms] (mean) </span></span></li> <li><span> </span></li> <li><span>Time per request: <span>0.839</span><span> [ms] (mean, across all concurrent requests) </span></span></li> <li><span> </span></li> <li><span>Transfer rate: <span>10807.45</span><span> [Kbytes/sec] received </span></span></li> </ol>
现在每秒钟可以处理1191.78个QPS了, 提升是~7%. 还不赖哈(咦, 你不是说10%么? 怎么成7%了? 呵呵, 正如我之前说过, 我们尝试分析PGO都做了些什么优化, 然后把一些通用的优化手工Apply到PHP7中. 所以也就是说, 那~3%的比较通用的优化已经包含到了PHP7里面了, 当然这个工作还在继续).
于是就这么简单, 大家可以用自己的产品的经典场景来训练GCC, 简单几步, 获得提升, 何乐而不为呢 :)
thanks
编者注:本文是 PHP 大神 —— 鸟哥 @Laruence 的作品,原文地址:http://www.laruence.com/2015/06/19/3063.html
以上就介绍了让你的 PHP 7 更快 GCC PGO,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

有四种方法可以调整 WordPress 文章列表:使用主题选项、使用插件(如 Post Types Order、WP Post List、Boxy Stuff)、使用代码(在 functions.php 文件中添加设置)或直接修改 WordPress 数据库。

WordPress 屏蔽 IP 的插件选择至关重要。可考虑以下类型:基于 .htaccess:高效,但操作复杂;数据库操作:灵活,但效率较低;基于防火墙:安全性能高,但配置复杂;自行编写:最高控制权,但需要更多技术水平。

WordPress 编辑日期可以通过三种方法取消:1. 安装 Enable Post Date Disable 插件;2. 在 functions.php 文件中添加代码;3. 手动编辑 wp_posts 表中的 post_modified 列。

在WordPress中创建自定义页头的步骤如下:编辑主题文件“header.php”。添加您的网站名称和描述。创建导航菜单。添加搜索栏。保存更改并查看您的自定义页头。

更换 WordPress 主题头部图片的分步指南:登录 WordPress 仪表盘,导航至“外观”>“主题”。选择要编辑的主题,然后单击“自定义”。打开“主题选项”面板并寻找“网站标头”或“头部图片”选项。单击“选择图像”按钮并上传新的头部图片。裁剪图像并单击“保存并裁剪”。单击“保存并发布”按钮以更新更改。

要使用 WordPress 主机建站,需要:选择一个可靠的主机提供商。购买一个域名。设置 WordPress 主机帐户。选择一个主题。添加页面和文章。安装插件。自定义您的网站。发布您的网站。

WordPress 错误解决指南:500 内部服务器错误:禁用插件或检查服务器错误日志。404 未找到页面:检查 permalink 并确保页面链接正确。白屏死机:增加服务器 PHP 内存限制。数据库连接错误:检查数据库服务器状态和 WordPress 配置。其他技巧:启用调试模式、检查错误日志和寻求支持。预防错误:定期更新 WordPress、仅安装必要插件、定期备份网站和优化网站性能。

WordPress 网站中启用评论功能:1. 登录管理面板,转到 "设置"-"讨论",勾选 "允许评论";2. 选择显示评论的位置;3. 自定义评论表单;4. 管理评论,批准、拒绝或删除;5. 使用 <?php comments_template(); ?> 标签显示评论;6. 启用嵌套评论;7. 调整评论外形;8. 使用插件和验证码防止垃圾评论;9. 鼓励用户使用 Gravatar 头像;10. 创建评论指
