ホームページ  >  記事  >  バックエンド開発  >  PHP7のパフォーマンスの変化が1分でわかる(パフォーマンスが4倍に向上)

PHP7のパフォーマンスの変化が1分でわかる(パフォーマンスが4倍に向上)

慕斯
慕斯転載
2021-06-25 10:22:113328ブラウズ

私たちは PHP の php7 についてたくさんのことを学びました。皆さんが php7 についてどれだけ知っているかわかりません。この部分の知識があれば、心配する必要はありません。この記事を読めば、この内容をより深く理解できるようになります。

PHP7 テクノロジー研究の背景

  1. 会社の収益増加と支出削減を背景にコスト削減が必要です
  2. PHP7 のパフォーマンスを以前の製品と比較した場合Meizu Online の現在の PHP バージョン 5.X 少なくとも 2 倍
  3. コミュニティの毎日のアクティブ ユーザーは急速に増加しています (15 年間のデータの毎日の平均 PV は年間 348% 増加し、毎日の平均 UV はは年間成長率 112%)
  4. モバイル インターネット環境では、より良いユーザー エクスペリエンスを満たすためにプログラムがユーザーの要求に迅速に応答できるようにすることが求められます
  5. 新しいテクノロジに関する知識への欲求 (ユーザーのニーズを満たすため)ほんの少しの見栄)

PHP7 のパフォーマンスは小さい 注

PHP7 のパフォーマンスの第一印象 (PHP5 の 3 倍 + 改善)

1. パフォーマンスの比較 - 簡単なソート アルゴリズム (ランダムに 5000 個の数値を生成し、クイック アルゴリズムに従ってソートします)

PHP7のパフォーマンスの変化が1分でわかる(パフォーマンスが4倍に向上)
PHP5.1 5000 個の数値を使用したクイック ソートの平均応答時間は 2587ms です。
PHP5.2 5000 個の数値によるクイック ソートの平均応答時間は 2625 ミリ秒です。
PHP5.3 5000 個の数値によるクイック ソートの平均応答時間は 2509 ミリ秒です。
PHP5.4 5000 個の数値によるクイック ソートの平均応答時間は 2339 ミリ秒
PHP7.0 5000数値クイックソート 平均応答時間 685ms

2. パフォーマンスの比較 - WordPress ホームページ

PHP7のパフォーマンスの変化が1分でわかる(パフォーマンスが4倍に向上)
PHP5.1 WordPress 平均応答時間 505ms
PHP5.2 WordPress 平均応答時間521ms
PHP5.3 WordPress 平均応答時間 498ms
PHP5.4 WordPress 平均応答時間 470ms
PHP7.0 WordPress 平均応答時間 158ms

3. パフォーマンス比較 - Flyme Community APP

PHP7のパフォーマンスの変化が1分でわかる(パフォーマンスが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呼び出し規約)
6. マクロ定義とインライン関数 (inline) により、コンパイラに作業の一部を事前に完了させます

PHP7 の実際のビジネスパフォーマンス向上が 30% 程度にとどまるのはなぜですか?

  1. 実際のビジネスには必ずしも非常に複雑な計算ロジックがあるわけではありません
  2. 実際のビジネスでは Redis と MYSQL が使用され、ネットワークと IO のボトルネックが PHP7 の全体的なパフォーマンスに影響します
  3. HTTPS パフォーマンスの問題により、PHP7 の機能が制限されます

Redis プロキシの問題

Redis プロキシの目的は、Redis の高可用性と分散キャッシュです
合格 パフォーマンス テストは比較的直接接続ですプロキシの使用によるパフォーマンスの損失は約 10 ~ 15% です (ビジネスによって比較的大きな差が生じる可能性があります)

それでは、プロキシを最適化する余地はあるのでしょうか?

PHP と Redis 間の長いリンクと短いリンクに関する問題

PHP7 Redis の長い接続のパフォーマンスは、短い接続のパフォーマンスよりも約 10% 高い (ビジネスによって大きく異なります)

MYSQL データベース接続プールの質問

PHP7のパフォーマンスの変化が1分でわかる(パフォーマンスが4倍に向上)

データベース接続プールは、データベース接続の割り当て、管理、解放を担当します。これにより、アプリケーションは新しいデータベース接続を確立する代わりに、既存のデータベース接続を再利用できるようになります。
Atlas は、360 によって開発および保守されているデータベース ミドルウェアです。アプリケーションと MySQL の間に位置し、MySQL のクライアント/サーバー プロトコルを実装し、サーバーとしてアプリケーションと通信し、クライアントとして MySQL と通信します。 DB の詳細をアプリケーションから保護し、MySQL の負担を軽減します。

Atlas は、読み取り、読み取りと書き込みの分離、自動テーブル シャーディング、セキュリティ処理、スムーズな再起動、接続プールなどに影響を与えることなく、メイン データベースのダウンタイムをサポートします。
データベース接続プールの使用後、TPS パフォーマンス レバレッジは 80 倍に増加します。 %
効果を見てみましょう

PHP7のパフォーマンスの変化が1分でわかる(パフォーマンスが4倍に向上)

PHP7 パフォーマンス最適化の詳細

PHP7 Opcache (約 1 倍の改善)

Opcache の動作原理?
  1. PHP はインタープリタ言語であり、Zend エンジンは PHP コードを実行可能なマシン コード (操作コード) に解釈し、実行のために CPU に渡します。
    PHP7のパフォーマンスの変化が1分でわかる(パフォーマンスが4倍に向上)
  2. Opcache の高速化方法
    PHP7のパフォーマンスの変化が1分でわかる(パフォーマンスが4倍に向上)

  3. opcache を追加した後の結果を見てください (リクエストの平均、応答時間は
    PHP7のパフォーマンスの変化が1分でわかる(パフォーマンスが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 のキャッシュ ミスが増加します。したがって、大きなメモリ ページを有効にできれば、この TLB キャッシュ ミスを間接的に減らすことができます。

<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. 従来と比較現在の Meizu、PHP7 オンライン PHP バージョン 5 のパフォーマンス。モバイル インターネットの一般的な環境では、より良いユーザー エクスペリエンスを満たすために、プログラムがユーザーの要求に迅速に応答できることが必要です。
  2. 新しいテクノロジーに関する知識への欲求 (満足させるため)少しの虚栄心)
  3. 関連する学習ビデオの共有:
  4. php ビデオ チュートリアル

以上がPHP7のパフォーマンスの変化が1分でわかる(パフォーマンスが4倍に向上)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。