让 PHP7 达到最高性能的几个建议

原文出处: 惠新宸(@Laruence)

PHP7 已经发布了,作为PHP十年来最大的版本升级,最大的性能升级,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

原文发布于微信公众号 - php(phpdaily)

原文发表时间:2015-12-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张戈的专栏

HTTP加速器varnish安装小记(1)

上午共享的那个varnish 安装手册,个人看了下,有点不知所云,好吧~看来还是先安装玩玩! 苦逼公司服务器没法连外网,不能用什么 wget 或 yum 命令直...

2948
来自专栏小白课代表

Autodesk Revit 2018安装教程

Revit是Autodesk公司一套系列软件的名称。Revit系列软件是专为建筑信息模型(BIM)构建的,可帮助建筑设计师设计、建造和维护质量更好、能效更高的建...

862
来自专栏FreeBuf

开源版ZoomEye:基于Python的网络侦查框架 – IVRE

IVRE(又名DRUNK)是一款网络侦查框架,包括两个基于p0f和Bro的被动侦查模块和一个基于Nmap&Zmap的主动侦查模块,其功能类似于国内知道创宇公司推...

2607
来自专栏Android源码框架分析

Android模拟器识别技术

Android模拟器常常被用来刷单,如何准确的识别模拟器成为App开发中的一个重要模块,目前也有专门的公司提供相应的SDK供开发者识别模拟器。 目前流行的And...

2784
来自专栏蓝天

C/C++编程可用的Linux自带工具

GNU Binary Utilities或binutils是一整套的编程语言工具程序,用来处理许多格式的目标文件。当前的版本原本由在Cygnus Soluti...

1172
来自专栏FreeBuf

Aws_Public_Ips:获取AWS账户关联的所有IP地址(IPv4IPv6)的工具

Aws_Public_Ips是一个可帮助你获取与AWS账户关联的,所有IP地址(IPv4/IPv6) 的工具。它可以被作为库和CLI使用,并支持以下AWS服务(...

952
来自专栏知识分享

八,ESP8266 文件保存数据(基于Lua脚本语言)

应该是LUA介绍8266的最后一篇,,,,,,下回是直接用SDK,,然后再列个12345.......不过要等一两个星期,先忙完朋友的事情 前面几篇 用AT指令...

3587
来自专栏FreeBuf

在你的内网中获得域管理员权限的五种方法

早在2013年9月,蜘蛛实验室( Spider Labs)就发表过一篇题为“SpiderLabs在你内网中获取域管的五大方式”的文章。这篇文章是我继该文的,应该...

1375
来自专栏大魏分享(微信公众号:david-share)

一份来自实施专家们的报告:Ansible Tower效果实测

前言: 本文作者是红帽实施团队专家李春霖和卢冲。本文已获得作者授权转载。在本文之前,本公众号已对自动化运维和Ansible Tower做了多次介绍,这次我们看...

8475
来自专栏杨建荣的学习笔记

聊聊Data Guard中的DG Broker(r10笔记第24天)

DG Broker是Oracle为Data Guard维护提供的一个很不错的工具,从我的实际使用来看,早期的版本中似乎大家都还是存在一定的思维定式,认为手工维护...

2754

扫码关注云+社区