首頁  >  文章  >  後端開發  >  一分鐘了解PHP7性能的蛻變(性能提升4倍)

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

慕斯
慕斯轉載
2021-06-25 10:22:113237瀏覽

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
FlymeAPP社群板塊板塊清單頁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. 實際的業務會用到Redis 和MYSQL,網路和IO的瓶頸影響了PHP7的整體效能
  2. 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>

相性能參數最佳化

  1. PHP部分效能參數最佳化
  2. php.ini配置
  3. <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>
  4. 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技術的背景#########公司開源節流的大背景下我們需要節省成本######PHP7相對於現在魅族線上的PHP版本5.X 效能提升至少一倍以上######社群日活用戶成長快速(15年數據日均PV 年成長348% 日均UV年成長112%)#######在行動互聯網的大環境下要求我們的程式能夠更快的速度響應用戶的請求以滿足更好的用戶體驗######對新技術的求知慾望(滿足自己的一點點虛榮心)### ######相關學習影片分享:###php影片教學#######

以上是一分鐘了解PHP7性能的蛻變(性能提升4倍)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除