zoukankan      html  css  js  c++  java
  • 让PHP7达到最高性能的几个Tips

    转载自 Laruence:http://www.laruence.com/2015/12/04/3086.html

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

  • 相关阅读:
    11. Container With Most Water
    9. Palindrome Number
    375. 猜数字大小 II leetcode java
    leetcode 72 编辑距离 JAVA
    73. 矩阵置零 leetcode JAVA
    快速排序 JAVA实现
    63. 不同路径 II leetcode JAVA
    重写(override)与重载(overload)
    62 不同路径 leetcode JAVA
    leetcode 56 合并区间 JAVA
  • 原文地址:https://www.cnblogs.com/tangxuliang/p/9322748.html
Copyright © 2011-2022 走看看