目次
OPcache とは
Opcache のインストール
ab テスト効果
配置参考
总结
ホームページ バックエンド開発 PHPチュートリアル OPCacheとは何ですか? OPCache を使用して PHP のパフォーマンスを向上させるにはどうすればよいですか?

OPCacheとは何ですか? OPCache を使用して PHP のパフォーマンスを向上させるにはどうすればよいですか?

May 07, 2021 pm 06:47 PM
opcache php

この記事では、OPCache について説明し、OPCache を使用して PHP のパフォーマンスを向上させる方法を詳しく紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

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とは何ですか? OPCache を使用して PHP のパフォーマンスを向上させるにはどうすればよいですか?

接下来是开启了 OPcache 的情况。

OPCacheとは何ですか? OPCache を使用して PHP のパフォーマンスを向上させるにはどうすればよいですか?

很明显,性能有了很大的提高。不仅速度快了很多,吞吐率也是直接上升了几倍。当然,这只是非常简单的一个测试,不过总体看来,确实对单机的性能提升有很大的帮助。最最主要的是,同样的并发情况下,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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles