この記事では、OPCache について説明し、OPCache を使用して PHP のパフォーマンスを向上させる方法を詳しく紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
PHP のようなインタープリタ型言語の場合、すべてのコードは実行されるたびにロードされ、解析されます。この利点は、コードがいつでも処理できることです。 . コンパイルする必要がないため、ホット アップデートの修正が行われます。しかし、これでは過剰なトラフィックを処理できないという問題も生じます。結局のところ、ロード、解析、リリースのたびに CPU への負荷が増加し、通常、8 コア 16G サーバーは、約 2000 または 3000 の同時実行で CPU 使用率が 60% 以上に達することがあります。 Laravel のような大規模なフレームワークを使用している場合、効率はさらに低くなります。現時点では通常、サーバーの負荷を軽減するために負荷分散のためにサーバーの数を増やします。ただし、その場合のコストは大幅に増加します。では、最適化ソリューションはあるのでしょうか?
Niao 兄弟によるブログの PHP7 の最適化に関する記事では、最初の提案は OPcache を有効にすることです。もちろん、Swoole を使用するという選択肢もあります。 Swooleについては次回に話すとして、今日はまずOPcacheについて学びます。
OPcache とは
OPcache は、PHP スクリプトのプリコンパイルされたバイトコードを共有メモリに保存し、プリコンパイルされた単語を保存することにより、PHP のパフォーマンスを向上させます。コードを節約できる利点は次のとおりです。毎回 PHP スクリプトをロードして解析するオーバーヘッドが節約されるということです。
これは、PHP ドキュメントの OPcache の紹介です。つまり、OPcache は、毎回のロードと解析の手順を保存し、最初の解析とコンパイルの後にスクリプトのバイトコードをシステムにキャッシュします。共有メモリ内にあります。実際、これは不完全なコンパイルに似ています。
Java に似た言語は、オンラインで実行する前に、jar パッケージにパッケージ化するなど、パッケージ化してコンパイルする必要があります。 C または C# は、.dll または .exe にパッケージ化できます。これらのパッケージ化されたファイルはコンパイルされたファイルであり、実行後も通常は実行されたままになり、常駐プロセスとなり、そのコードがメモリに入ります。プログラムの実行時に解釈やコンパイルを行う必要がないため、当然のことながら速度は大幅に速くなります。 OPcache も同様の役割を果たします。ただし、これは完全なコンパイル プロセスではありません。スクリプトの実行には依然として PHP-FPM に依存しています。ただし、OPcache を有効にした後、PHP-FPM はまずメモリを検索して、関連するキャッシュされたバイトコードが既に存在するかどうかを確認します。メモリ内にある場合は直接アクセスされますが、そうでない場合は解釈されて再度コンパイルされ、キャッシュされます。さらに、OPcache はファイル用です。つまり、ファイルが新しく追加された場合、そのファイルは実行されている場合にのみキャッシュされ、実行されていない場合、現在の共有メモリには存在しません。
推奨学習: 「PHP ビデオ チュートリアル 」
Opcache のインストール
OPcache はすでに PHP の公式拡張機能であり、パッケージは一緒にリリースされるため、PHP をコンパイルおよびインストールするときに --enable-opcache を使用して拡張機能を有効にすることができます。これはすでにデフォルトの拡張機能です。インストール パッケージ内のファイルを使用して、OPcache がインストールされていないシステムに OPcache をインストールすることもできます。
cd php-7.4.4/ext/opcache/ phpize ./configure make && make install
OPcache と Xdebug は運用環境では一緒に使用しないでください。 Xdebug 自体は運用環境での使用はお勧めできません。同時に使用する必要がある場合は、最初に OPcache をロードし、次に Xdebug をロードする必要があります。
拡張機能がインストールされたら、php.ini ファイル内の拡張機能を開きます。 OPcache 拡張機能は Zend 拡張機能パッケージであるため、開く必要があるのは Zend 拡張機能であることに注意してください。
zend_extension=opcache.so
また、それを有効にする必要があります。
opcache.enable=1
OPcache をオンにしてコードを更新すると、更新したばかりのコードが最新のコードではないことがわかります。これは、Java と同様にコードがキャッシュされており、サービスを再起動する必要があるためです。では、PHP における再起動とは何でしょうか?もちろん、PHP-FPM を再起動するだけで、kill -USR2 コマンドを使用してメイン プロセスを再起動するだけです。クイック再起動コマンドもここで提供されます。
ps -ef | grep "php-fpm: master" | grep -v grep | cut -c 9-15 | xargs kill -USR2
Zhihu からの修正に感謝します。PHP-FPM を再起動するのは最善の解決策ではありません。opcache_reset() を使用して手動で再起動するか、php を通じて opcache.validate_timestamps opcache.revalidate_freq を自動的に設定する必要があります。 ini ファイル。インターバル コンパイル、または opcache_compile_file() を通じて変更されたファイルを直接再コンパイルします。
ab テスト効果
テストするコンテンツはテスト環境の一部です。この2コア4Gサーバーで使用されているPHPバージョンはPHP7.4で、通常のNginxとPHPの設定とulimitも最大まで開放されています。このコードは単にテキスト行を出力するだけですが、単純な mvc フレームワークを使用しています。つまり、このコードが実行されると、1 つのファイルだけではなく、少なくとも複数のファイルが読み込まれます。
首先我们来看未开启 OPcache 的情况。
接下来是开启了 OPcache 的情况。
很明显,性能有了很大的提高。不仅速度快了很多,吞吐率也是直接上升了几倍。当然,这只是非常简单的一个测试,不过总体看来,确实对单机的性能提升有很大的帮助。最最主要的是,同样的并发情况下,CPU 资源也比未开启的状态下低了70%。
配置参考
在 PHP 的官方文档中,已经为我们给出了一套默认的 OPcache 在 php.ini 中的配置。经过测试,基本没什么问题,当然,现在还没有在生产环境中使用过,还需要进行更多的测试。不过文档中指出,这套配置是可以直接运用到线上的,不过需要注意的是某些使用了注解之类功能的高级框架可能需要注意某些参数。
opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 opcache.fast_shutdown=1 opcache.enable_cli=1
具体的配置说明以及其他的一些配置选项我们可以参考官方文档进行详细的了解。
总结
既然是我们的 PHP 大神鸟哥推荐的,而且也是官方推荐的扩展,我觉得在正式生产环境中使用不会有太大问题。另外,官方也给出了一套可以直接运用于线上生产环境的配置参数,也方便我们直接在线上进行测试。目前在生产环境中,我们只使用了一台服务器来进行测试,并且给它多分配了一些负载过来,从目前的情况来看,这一台机器的运行效率比其他几台的高很多。因为它一方面处理了更多的请求,另一方面它的 CPU 资源占用率还没有其他几台机器高。同时,OPcache 也不需要我们去了解更多的进程协程之类的知识,不像 Swoole 一样的会带来更高的学习成本。所以综上所述,在测试完备的情况下,OPcache 绝对是我们最优先考虑的单机优化方案。
更多编程相关知识,请访问:编程入门!!
以上がOPCacheとは何ですか? OPCache を使用して PHP のパフォーマンスを向上させるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PHPでは、特性は方法が必要な状況に適していますが、継承には適していません。 1)特性により、クラスの多重化方法が複数の継承の複雑さを回避できます。 2)特性を使用する場合、メソッドの競合に注意を払う必要があります。メソッドの競合は、代替およびキーワードとして解決できます。 3)パフォーマンスを最適化し、コードメンテナビリティを改善するために、特性の過剰使用を避け、その単一の責任を維持する必要があります。

依存関係噴射コンテナ(DIC)は、PHPプロジェクトで使用するオブジェクト依存関係を管理および提供するツールです。 DICの主な利点には、次のものが含まれます。1。デカップリング、コンポーネントの独立したもの、およびコードの保守とテストが簡単です。 2。柔軟性、依存関係を交換または変更しやすい。 3.テスト可能性、単体テストのために模擬オブジェクトを注入するのに便利です。

SplfixedArrayは、PHPの固定サイズの配列であり、高性能と低いメモリの使用が必要なシナリオに適しています。 1)動的調整によって引き起こされるオーバーヘッドを回避するために、作成時にサイズを指定する必要があります。 2)C言語アレイに基づいて、メモリと高速アクセス速度を直接動作させます。 3)大規模なデータ処理とメモリに敏感な環境に適していますが、サイズが固定されているため、注意して使用する必要があります。

PHPは、$ \ _ファイル変数を介してファイルのアップロードを処理します。セキュリティを確保するための方法には次のものが含まれます。1。アップロードエラー、2。ファイルの種類とサイズを確認する、3。ファイル上書きを防ぐ、4。ファイルを永続的なストレージの場所に移動します。

JavaScriptでは、nullcoalescingoperator(??)およびnullcoalescingsignmentoperator(?? =)を使用できます。 1.??最初の非潜水金または非未定されたオペランドを返します。 2.??これらの演算子は、コードロジックを簡素化し、読みやすさとパフォーマンスを向上させます。

XSS攻撃を防ぎ、リソースのロードを制限し、ウェブサイトのセキュリティを改善できるため、CSPは重要です。 1.CSPはHTTP応答ヘッダーの一部であり、厳格なポリシーを通じて悪意のある行動を制限します。 2。基本的な使用法は、同じ起源からのロードリソースのみを許可することです。 3.高度な使用法は、特定のドメイン名がスクリプトやスタイルをロードできるようにするなど、より微調整された戦略を設定できます。 4。CSPポリシーをデバッグおよび最適化するには、コンテンツセキュリティポリシーレポートのみのヘッダーを使用します。

HTTPリクエストメソッドには、それぞれリソースを取得、送信、更新、削除するために使用されるGET、POST、PUT、および削除が含まれます。 1. GETメソッドは、リソースを取得するために使用され、読み取り操作に適しています。 2. POSTメソッドはデータの送信に使用され、新しいリソースを作成するためによく使用されます。 3. PUTメソッドは、リソースの更新に使用され、完全な更新に適しています。 4.削除メソッドは、リソースの削除に使用され、削除操作に適しています。

HTTPSは、HTTPに基づいてセキュリティレイヤーを追加するプロトコルであり、主に暗号化されたデータを介してユーザーのプライバシーとデータセキュリティを保護します。その作業原則には、TLSの握手、証明書の確認、暗号化された通信が含まれます。 HTTPSを実装する場合、証明書管理、パフォーマンスへの影響、および混合コンテンツの問題に注意を払う必要があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1
使いやすく無料のコードエディター

ホットトピック



