この記事の内容は php.ini 設定のチューニングに関するもので、必要な友達は参考にしてください。
デフォルトでインストールされている PHP はデパートで購入した通常の PHP と同じです。スーツはぴったりとはいえ、完璧ではありませんでした。調整された PHP は、正確な測定値に一致するオーダーメイドのスーツのようなものです。ただし、PHP のチューニングは PHP のパフォーマンスと効率を向上させるための手段にすぎず、貧弱なコードや応答しない API 呼び出しを修正できるわけではないことに注意してください。
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.ini
の memory_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()
関数を呼び出すことができます。どのメソッドを使用する場合でも、同じスクリプトを使用する必要があります。複数回実行して、平均メモリ消費量を取得します。 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 = 5
max_execution_time = 5
注:在 PHP 脚本中可以调用 set_limit_time() 函数覆盖这个设置。
假设我们想要生成报告,并把结果制作成 PDF 文件,这个任务可能要花 10 分钟才能完成,而我们肯定不想让 PHP 请求等待 10 分钟,我们应该单独编写一个 PHP 文件,让其在单独的后台进程中执行,Web 应用只需几毫秒就可以派生一个单独的后台进程,然后返回 HTTP 响应:
<?phpexec('echo "create-report.php" | at now');echo 'report pending...';
1
2
3
create-report.php
session.save_handler = 'memcached'session.save_path = '127.0.0.1:11211'2
3
create-report.php
は、別のバックグラウンド プロセスで実行されます。実行後、データベースを更新したり、レポートを電子メールで受信者に送信したりできます。ただし、このような使用法は、セキュリティ、スケーラビリティ、および保守性の観点から、類似の機能を実装する場合に比べて、軽量のメッセージ キューを使用する方が優れています。 セッションの処理PHP のデフォルトのセッション ハンドラーはセッション データをハードディスクに保存し、不要なディスク I/O を発生させて時間を無駄にするため、大規模なアプリケーションの速度が低下する可能性があります。たとえば、Memcached や Redis を使用して、セッション データをメモリに保持する必要があります。これには、後でスケールしやすくなるという追加の利点もあります。セッション データがハードディスクに保存されている場合、サーバーを追加するのは不便です。セッション データが Memcached または Redis に保存されている場合は、どの分散 PHP-FPM サーバーでもセッション データにアクセスできます。 Memcached にセッション データを保存したい場合は、以下を設定する必要があります:
output_buffering = 4096implicit_flush = false2
realpath_cache_size = 64K
以上がphp.ini設定のチューニングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。