站長資訊網
        最全最豐富的資訊網站

        一分鐘了解PHP7性能的蛻變(性能提升4倍)

        PHP中我們了解了那么多關于php7的知識,不知道你們對php7有多少了解,我相信很大一部分人會不知道這部分知識點,那么不急本篇文章就是帶領大家更深刻的去了解這個內容。

        研究PHP7技術的背景

        1. 公司開源節流的大背景下 我們需要節省成本
        2. PHP7相對于現在魅族線上的PHP版本5.X 性能提升至少一倍以上
        3. 社區日活用戶增長迅速(15年數據 日均PV 年增長348% 日均UV年增長112%)
        4. 移動互聯網的大環境下 要求我們的程序能夠更快的速度響應用戶的請求 以滿足更好的用戶體驗
        5. 對新技術的求知欲望(滿足自己的一點點虛榮心)

        PHP7性能小記

        PHP7性能初印象(比PHP5提升3倍+)

        1. 性能對比 – 快速排序算法(隨機生成5000個數后按照快速算法排序)

        一分鐘了解PHP7性能的蛻變(性能提升4倍)
        PHP5.1 5000個數快速排序平均響應時間2587ms
        PHP5.2 5000個數快速排序平均響應時間2625ms
        PHP5.3 5000個數快速排序平均響應時間2509ms
        PHP5.4 5000個數快速排序平均響應時間2339ms
        PHP7.0 5000個數快速排序平均響應時間685ms

        2.性能對比 – WordPress首頁

        一分鐘了解PHP7性能的蛻變(性能提升4倍)
        PHP5.1 WordPress平均響應時間505ms
        PHP5.2 WordPress平均響應時間521ms
        PHP5.3 WordPress平均響應時間498ms
        PHP5.4 WordPress平均響應時間470ms
        PHP7.0 WordPress平均響應時間158ms

        3.性能對比 – Flyme社區APP

        一分鐘了解PHP7性能的蛻變(性能提升4倍)
        PHP5.4 500個數快速排序TPS 552
        PHP7.0 500個數快速排序TPS 3165
        Flyme社區APP首頁 PHP5.4 TPS 1535
        Flyme社區APP首頁 PHP7.0 TPS 1975
        Flyme社區APP板塊列表頁 PHP5.4 TPS 2237
        Flyme社區APP板塊列表頁 PHP7.0 TPS 2387

        性能測試遇到的幾個問題&解決辦法

        為什么PHP7的性能可以提高這么多?

        1. JIT
        2. Zval的改變
        3. 內部類型zend_string
        4. PHP數組的變化(HashTable和Zend Array)
        5. 函數調用機制(Function Calling Convention)
        6. 通過宏定義和內聯函數(inline),讓編譯器提前完成部分工作

        為什么PHP7的在實際的業務性能提高才30%左右?

        1. 實際的業務不一定有很復雜的計算邏輯
        2. 實際的業務會用到Redis 和MYSQL,網絡和IO的瓶頸 影響了PHP7的整體性能
        3. HTTPS的性能問題 限制了PHP7的能力

        Redis Proxy的問題

        Redis Proxy目的是為了做Redis高可用&分布式緩存用的
        經過性能測試,相對直接連接redis而已,用Proxy的性能損耗在10-15%左右(不同的業務 可能影響有比較大的差異)

        那么Proxy是不是還有優化的空間的呢?

        PHP和Redis長短鏈接的問題

        PHP7 Redis長連接比短連接性能高10%左右(不同的業務差別比較大)

        MYSQL數據庫連接池的問題

        一分鐘了解PHP7性能的蛻變(性能提升4倍)

        數據庫連接池負責分配、管理和釋放數據庫連接,它允許應用程序重復使用一個現有的數據庫連接,而不是再重新建立一個。
        Atlas 是360開發和維護的數據庫中間件。是一個位于應用程序與MySQL之間,它實現了MySQL的客戶端與服務端協議,作為服務端與應用程序通訊,同時作為客戶端與MySQL通訊。它對應用程序屏蔽了DB的細節,同時為了降低MySQL負擔。

        Atlas 支持主庫宕機不影響讀、讀寫分離、自動分表、安全處理、平滑重啟、連接池等
        用了數據庫連接池后 TPS性能杠杠的 整整提高了80%
        來看看效果吧

        一分鐘了解PHP7性能的蛻變(性能提升4倍)

        PHP7性能優化的幾個細節

        PHP7 Opcache(提升1倍左右)

        Opcache的工作原理 ?
        1. PHP是解釋型語言,Zend引擎會將PHP代碼解釋為可執行機器碼(Operate Code)之后再交由CPU執行。
          一分鐘了解PHP7性能的蛻變(性能提升4倍)
        2. Opcache是如何加速的
          一分鐘了解PHP7性能的蛻變(性能提升4倍)

        3. 看看加了opcache后的成果吧(請求平均響應時間足足減少了一倍 有木有)
          一分鐘了解PHP7性能的蛻變(性能提升4倍)

        編譯器GCC4.8+PGO(提升5%-10%)

        PGO是一項編譯優化技術,它可以配合GCC等編譯器使用,提高編譯器的編譯效率。
        雖然PGO可以提高編譯效率,但它并沒有被廣泛使用。
        原因很簡單:
        1. 它繁雜的雙編譯模型 和 有限的使用場景,讓PGO顯得很雞肋
        2. 在有了opcache這樣的產品出現后,PGO帶來的性能提升并不是很明顯。

        開啟多個PHP-FPM主進程(提高10%左右)

        <source lang="xml" collapse="false" first-line="1">     #php-fpm.conf      listen = /dev/shm/php-fcgi.sock     #php-fpm2.conf      listen = /dev/shm/php-fcgi2.sock      #/usr/local/php/sbin/php-fpm --fpm-config /usr/local/php/etc/php-fpm.conf     #/usr/local/php/sbin/php-fpm --fpm-config /usr/local/php/etc/php-fpm2.conf      #代理     upstream backend{         server unix:/dev/shm/php-fcgi.sock;         server unix:/dev/shm/php-fcgi2.sock;     } </source>

        HugePage(提升2%-3%)

        默認的內存是以4KB分頁的,而虛擬地址和內存地址是需要轉換的, 而這個轉換是要查表的,
        CPU為了加速這個查表過程都會內建TLB(Translation Lookaside Buffer), 顯而易見如果虛擬頁越小,表里的條目數也就越多,
        而TLB大小是有限的,條目數越多TLB的Cache Miss也就會越高, 所以如果我們能啟用大內存頁就能間接降低這個TLB Cache Miss。

        <source lang="xml" collapse="false" first-line="1">     opcache.huge_code_pages=1     sudo sysctl vm.nr_hugepages=128 </source>

        相性能參數優化

        PHP部分性能參數優化

        1. php.ini配置

          <source lang="xml" collapse="false" first-line="1">     opcache.enable=1     opcache.enable_cli=1     opcache.memory_consumption=128     opcache.interned_strings_buffer=8     opcache.max_accelerated_files=4000     opcache.revalidate_freq=60     opcache.save_comments=0     opcache.fast_shutdown=1     opcache.huge_code_pages=1     opcache.file_cache=/dev/shm/opcache/ </source>
        2. PHP-FPM

          <source lang="xml" collapse="false" first-line="1">     listen = /dev/shm/php-fcgi.sock     pm = static     pm.max_children = 320     pm.max_requests = 10240 </source>

        未解決的問題

        Nginx HTTPS的性能問題


        研究PHP7技術的背景

        1. 公司開源節流的大背景下 我們需要節省成本
        2. PHP7相對于現在魅族線上的PHP版本5.X 性能提升至少一倍以上
        3. 社區日活用戶增長迅速(15年數據 日均PV 年增長348% 日均UV年增長112%)
        4. 移動互聯網的大環境下 要求我們的程序能夠更快的速度響應用戶的請求 以滿足更好的用戶體驗
        5. 對新技術的求知欲望(滿足自己的一點點虛榮心)

        相關學習視頻分享:php視頻教程

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚洲第一精品在线视频| 久久精品国产亚洲麻豆| 国内精品免费在线观看| 日本精品久久久久影院日本 | 久久精品国产一区二区三区| HEYZO无码综合国产精品227| 在线观看国产精品普通话对白精品| 无码精品第一页| 亚洲国产综合精品中文第一区| 欧美肥屁VIDEOSSEX精品| 久久亚洲中文字幕精品一区| 91精品国产91久久久久久| 国产精品无码无需播放器| 亚洲欧洲国产精品香蕉网| 久久精品国产亚洲一区二区三区| 亚洲精品免费在线观看| 99久久成人国产精品免费| 久久99精品久久久久久hb无码 | 久久久人妻精品无码一区| 在线观看日韩精品| 国产成人精品综合网站| 55夜色66夜色国产精品视频| 久久久无码精品亚洲日韩按摩 | 少妇精品久久久一区二区三区| 午夜精品久久久久成人| 精品久久久久久无码中文野结衣| 国产成人久久精品二区三区| 91精品国产福利在线观看| 久久国产乱子精品免费女| 国产成人精品免费视频大| 国产AV国片精品有毛| 国产精品亚洲精品日韩已满| 日产精品久久久一区二区| 全球AV集中精品导航福利| 日本午夜精品一区二区三区电影| 亚洲精品国产品国语在线| 伊人久久综合精品无码AV专区| 国产精品免费高清在线观看| 日韩国产精品无码一区二区三区| 日韩精品久久久久久免费| 久久精品国产亚洲AV无码麻豆 |