ホームページ > バックエンド開発 > PHPチュートリアル > php.ini設定のチューニング

php.ini設定のチューニング

不言
リリース: 2023-03-24 20:46:02
オリジナル
1709 人が閲覧しました

この記事の内容は php.ini 設定のチューニングに関するもので、必要な友達は参考にしてください。

デフォルトでインストールされている PHP はデパートで購入した通常の PHP と同じです。スーツはぴったりとはいえ、完璧ではありませんでした。調整された PHP は、正確な測定値に一致するオーダーメイドのスーツのようなものです。ただし、PHP のチューニングは PHP のパフォーマンスと効率を向上させるための手段にすぎず、貧弱なコードや応答しない API 呼び出しを修正できるわけではないことに注意してください。

php.ini ファイル

PHP インタープリターは php.ini ファイルで構成および調整されます。このファイルの場所はオペレーティング システムによって異なり、通常はコマンドの対応する です。 >php.ini 行と、PHP-FPM に対応する php.ini ファイルは別のものです。ここでは、PHP-FPM に対応する php.ini が設定されていると仮定しますが、以下で説明する最適化対策はすべての php.ini に適用されます。 php.ini 文件中配置和调优,这个文件在不同操作系统中的位置有所不同,而且一般命令行对应的 php.ini 和 PHP-FPM 对应的 php.ini文件是分开的。这里我们假设配置的是 PHP-FPM 对应的 php.ini,但是下面讲的优化措施适用于所有php.ini

注:我们首先应该使用 PHP Iniscan工具扫描 php.ini,检查使用了安全方面的最佳实践。

内存

运行 PHP 时需要关心每个 PHP 进程要使用多少内存,   php.ini中的 memory_limit设置用于设定单个 PHP 进程可以使用的系统内存最大值。

这个设置的默认值是 128M,这对于大多数中小型 PHP 应用来说或许合适,不过,如果运行的是微型 PHP 应用,可以降低这个值,以便节省系统资源,反之,如果运行的是内存集中型 PHP 应用,可以增加这个值。这个值的大小由可用的系统内存决定,确定给 PHP 分配多少值是一门艺术,决定给 PHP 分配多少内存,以及能负担起多少个 PHP-FPM 进程时,可以根据以下维度信息进行判断:


  • 一共可以分配给 PHP 多少内存?以一个 2G 内存的 VPS 为例,这台设备中可能还运行了其他进程,如 MySQL、Nginx 等,那么留 512M 给 PHP 是合适的。

  • 每个 PHP 进程平均耗费多少内存?这个要监控进程的内存使用量,可以使用命令行命令 top,也可以在 PHP 脚本中调用memory_get_peak_usage()

  • 注: まず、PHP Iniscan ツールを使用して php.ini をスキャンし、セキュリティのベスト プラクティスが使用されていることを確認する必要があります。
  • メモリ
  • PHP を実行するときは、各 PHP プロセスが使用するメモリの量に注意する必要があります。その量の設定には、php.inimemory_limit 設定が使用されます。単一の PHP プロセスが使用できるシステム メモリの最大量。


    この設定のデフォルト値は 128M で、ほとんどの中小規模の PHP アプリケーションに適しています。ただし、マイクロ PHP アプリケーションを実行している場合は、この値を 128M まで下げることができます。一方、メモリを大量に消費する PHP アプリケーションを実行している場合は、この値を増やすことができます。この値のサイズは、利用可能なシステム メモリによって決まります。PHP に割り当てるメモリの量と、PHP が許容できる PHP-FPM プロセスの数を決定するのは非常に困難です。次の次元情報について:

PHP に合計でどれくらいのメモリを割り当てることができますか? 2G メモリを搭載した VPS を例に挙げると、このデバイスでは MySQL、Nginx などの他のプロセスも実行できるため、PHP 用に 512M を残しておくのが適切です。

各 PHP プロセスは平均してどのくらいのメモリを消費しますか?プロセスのメモリ使用量を監視するには、コマンド ライン コマンド top を使用するか、PHP スクリプトで memory_get_peak_usage() 関数を呼び出すことができます。どのメソッドを使用する場合でも、同じスクリプトを使用する必要があります。複数回実行して、平均メモリ消費量を取得します。
  • PHP-FPM プロセスはいくつまで余裕がありますか? 512M のメモリを PHP に割り当て、各 PHP プロセスが平均 15M のメモリを消費すると仮定すると、34 個の PHP-FPM プロセスを用意できます。
  • システムリソースは十分ですか?最後に、PHP アプリケーションを実行し、予想されるトラフィックを処理するのに十分なシステム リソースがあることを確認する必要があります。
  • 注: Apache Bench または Siege を使用して、運用環境と同様の条件下で PHP アプリケーションのストレス テストを行い、運用環境に十分なリソースが利用可能かどうかを判断する必要があります。

    🎜Zend OPcache🎜🎜 割り当てるメモリ量を決定したら、PHP の Zend OPcache 拡張機能を構成できます。この拡張機能の詳細については、次の記事を参照してください: http://laravelacademy.org/post/4396.html。 🎜🎜PHP 5.5.0 以降には、この拡張機能が組み込まれています。php.ini ファイルで Zend OPcache 拡張機能を構成および最適化するために使用される設定は次のとおりです: 🎜🎜🎜🎜opcache.memory_consumption = 64: オペコードに割り当てられたメモリ。キャッシュ (単位: MB)、アプリケーション内のすべての PHP スクリプトによってコンパイルされたオペコードを保存できる割り当てメモリの量。この値はアプリケーションのサイズに応じて異なるサイズに設定できます。 🎜🎜🎜🎜opcache.interned_strings_buffer = 16: 常駐文字列を格納するために使用されるメモリ量 (単位は MB) 常駐文字列とは何ですか? PHP インタープリターは、バックグラウンドで同じ文字列の複数のインスタンスを検索し、その文字列をメモリに保存します。これは、メモリを節約するためです。デフォルトでは、PHP 常駐文字列は各 PHP プロセスで分離され、PHP-FPM プロセス プールですべてのプロセス常駐文字列を共有バッファーに保存できるようになります。複数のプロセス間で参照されるため、より多くのメモリが節約されます。 🎜🎜🎜🎜opcache.max_accelerated_files = 4000: オペコード キャッシュに保存できる PHP スクリプトの最大数は、2000 から 100000 までです。この値は、PHP アプリケーション内のファイルの数より大きくなければなりません。 。 🎜🎜🎜🎜opcache.validate_timestamps = 1: この設定の値が 1 の場合、PHP は一定期間後に PHP スクリプトの内容が変更されたかどうかをチェックします。チェック間隔は opcache.revalidate_freq 設定によって指定されます。この設定の値が 0 の場合、PHP は PHP スクリプトの内容が変更されたかどうかをチェックしないため、キャッシュされたオペコードを自分でクリアする必要があります。開発環境では 1 に設定し、運用環境では 0 に設定することをお勧めします。 🎜
  • opcache.revalidate_freq = 0: PHP スクリプトの内容が変更されたかどうかを確認する頻度 (秒単位) を設定します。 0 秒に設定する意味は、opcache.validate_timestamps が 1 に設定されている場合にのみ、PHP ファイルはリクエストごとに再検証されます。そのため、開発環境では PHP ファイルは毎回再検証されます。本番環境では確認できません。

  • opcache.fast_shutdown = 1: この設定により、オペコードはより高速なシャットダウン ステップを使用できるようになり、オブジェクトの破棄とメモリの解放は Zend Engine のメモリ マネージャーに任せられます。

ファイルのアップロード

アプリケーションでファイルのアップロードが許可されている場合は、アップロードできる最大ファイル サイズを設定することをお勧めします。さらに、同時にアップロードできるファイルの最大数を設定することをお勧めします:

file_uploads = 1upload_max_filesize = 10Mmax_file_uploads = 3
ログイン後にコピー
  • 1

  • 2

  • 3

デフォルトでは、PHP は 1 つのファイルでのアップロードを許可します。 1 回のリクエストで 20 ファイル、最大アップロード ファイルは 2MB です。ここでは、1 回のリクエストで最大 3 個のファイルをアップロードできるように設定し、各ファイルは最大 10MB に設定します。設定しすぎるとタイムアウトが発生します。起こる。

注: 大きなファイルをアップロードする必要がある場合は、それに応じて Web サーバーの構成を調整する必要があります。 php.ini での設定に加えて、Nginx 仮想ホスト構成の client_max_body_size 設定を調整します。

最大実行時間

php.ini ファイルの max_execution_time は、単一の PHP プロセスが終了するまでに実行できる最大時間を設定するために使用されます。この設定のデフォルトは 30 秒ですが、5 秒に設定することをお勧めします:

max_execution_time = 5max_execution_time = 5

注:在 PHP 脚本中可以调用 set_limit_time() 函数覆盖这个设置。

假设我们想要生成报告,并把结果制作成 PDF 文件,这个任务可能要花 10 分钟才能完成,而我们肯定不想让 PHP 请求等待 10 分钟,我们应该单独编写一个 PHP 文件,让其在单独的后台进程中执行,Web 应用只需几毫秒就可以派生一个单独的后台进程,然后返回 HTTP 响应:

<?phpexec(&#39;echo "create-report.php" | at now&#39;);echo &#39;report pending...&#39;;
ログイン後にコピー
  • 1

  • 2

  • 3

create-report.php

注: PHP スクリプトで set_limit_time() 関数を呼び出して、これをオーバーライドできます。設定。

レポートを生成して結果を PDF ファイルにしたいとします。このタスクは完了するまでに 10 分かかる可能性がありますが、PHP リクエストを 10 分も待たせる必要はありません。 PHP ファイルを開き、別のバックグラウンド プロセスで実行されると、Web アプリケーションはわずか数ミリ秒で別のバックグラウンド プロセスをフォークし、HTTP 応答を返すことができます:

session.save_handler = &#39;memcached&#39;session.save_path = &#39;127.0.0.1:11211&#39;2
ログイン後にコピー

1

2

3

create-report.php は、別のバックグラウンド プロセスで実行されます。実行後、データベースを更新したり、レポートを電子メールで受信者に送信したりできます。ただし、このような使用法は、セキュリティ、スケーラビリティ、および保守性の観点から、類似の機能を実装する場合に比べて、軽量のメッセージ キューを使用する方が優れています。

セッションの処理

PHP のデフォルトのセッション ハンドラーはセッション データをハードディスクに保存し、不要なディスク I/O を発生させて時間を無駄にするため、大規模なアプリケーションの速度が低下する可能性があります。たとえば、Memcached や Redis を使用して、セッション データをメモリに保持する必要があります。これには、後でスケールしやすくなるという追加の利点もあります。セッション データがハードディスクに保存されている場合、サーバーを追加するのは不便です。セッション データが Memcached または Redis に保存されている場合は、どの分散 PHP-FPM サーバーでもセッション データにアクセスできます。

Memcached にセッション データを保存したい場合は、以下を設定する必要があります:

output_buffering = 4096implicit_flush = false2
ログイン後にコピー

バッファリングされた出力

より少ないデータをより多くのブロックで送信するのではなく、より多くのデータをより少ないブロックで送信したい場合、ネットワークは次のようになります。より効率的に、つまり、より少ないフラグメントでコンテンツを訪問者のブラウザに配信すると、HTTP リクエストの総数を減らすことができます。

したがって、PHP は出力をバッファリングする必要があります。デフォルトでは、PHP はコンテンツを Web サーバーに送信する前に 4096 バイトの出力をバッファリングします。 🎜
realpath_cache_size = 64K
ログイン後にコピー
🎜🎜注: 出力バッファ サイズを変更する場合は、必ず 4 (32 ビット システム) または 8 (64 ビット システム) の倍数の値を使用してください。 🎜🎜🎜実パス キャッシュ🎜🎜PHP はアプリケーションで使用されるファイル パスをキャッシュするため、ファイルがインクルードまたはインポートされるたびにインクルード パスを常に検索する必要がなくなります。このキャッシュは実パス キャッシュと呼ばれます。 (リアルパス キャッシュ)。大規模な PHP ファイル (Composer コンポーネントなど) を実行している場合は、多数のファイルを使用するため、PHP リアル パス キャッシュのサイズを増やすとパフォーマンスが向上する可能性があります。 🎜🎜実パス キャッシュのデフォルト サイズは 16K です。このキャッシュに必要な正確なサイズを決定するのは簡単ではありませんが、ちょっとしたトリックを使用できます。まず、実パス キャッシュのサイズを大きくして、特別なサイズに設定します。 256K などの大きな値を指定し、PHP スクリプトの最後に print_r(realpath_cache_size()) を追加して実パス キャッシュの実際のサイズを出力し、最後に実パス キャッシュのサイズをこの実数に変更します。価値。 php.ini ファイルで実際のパス キャッシュのサイズを設定できます: 🎜rrreee🎜関連する推奨事項: 🎜🎜🎜PHP.ini のメイン セッション設定の詳細な紹介🎜🎜🎜🎜 php の一般的な設定の詳細な説明.ini🎜🎜

以上がphp.ini設定のチューニングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート