ホームページ  >  記事  >  バックエンド開発  >  PHP-FPM パフォーマンス向上ガイド: Web サイトの応答時間とスループットの最適化

PHP-FPM パフォーマンス向上ガイド: Web サイトの応答時間とスループットの最適化

WBOY
WBOYオリジナル
2023-10-05 11:33:141086ブラウズ

PHP-FPM パフォーマンス向上ガイド: Web サイトの応答時間とスループットの最適化

PHP-FPM パフォーマンス向上ガイド: Web サイトの応答時間とスループットを最適化するには、特定のコード例が必要です

はじめに:
今日のインターネット時代では、Web サイトのパフォーマンスの最適化はますます重要になっています。 Web サイトでのユーザー エクスペリエンスは、ユーザー維持率とコンバージョン率に直接関係します。 PHP は一般的に使用されるバックエンド開発言語であり、PHP-FPM は PHP FastCGI Process Manager の略称であり、PHP 実行モードの選択です。この記事では、具体的なコード例を示しながら、PHP-FPM を最適化することで Web サイトの応答時間とスループットを向上させる方法について詳しく説明します。

1. PHP-FPM 構成の最適化

  1. プロセス プール設定の調整
    PHP-FPM はプロセス プールを使用してリクエストを管理します。プロセス プール設定を適切に調整すると、パフォーマンスが向上します。
    a. max_children: 各プロセス プール内の子プロセスの最大数を指定します。サーバーのパフォーマンスと負荷に基づいて、この値を適切に調整します。コマンド「pm.max_children = 50」を使用すると、子プロセスの最大数を 50 に設定できます。
    b. start_servers: プロセス プールを開始するときの子プロセスの数を指定します。サーバーの負荷に基づいて適切な値を選択してください。コマンド「pm.start_servers = 10」を使用すると、起動時の子プロセスの数を 10 に設定できます。
  2. 接続プール設定の調整
    接続プールは、Web サーバー (Nginx など) との接続を管理するために PHP-FPM によって使用されます。接続プール設定を調整することで、接続のパフォーマンスを向上させることができます。
    a. pm.max_requests: 各子プロセスによって処理されるリクエストの最大数を指定します。子プロセスによって処理されるリクエストの数がこの値に達すると、子プロセスはシャットダウンされ、再起動されます。これにより、長時間実行されるプロセスによって引き起こされるメモリ リークが回避されます。コマンド「pm.max_requests = 10000」を使用すると、各子プロセスによって処理されるリクエストの最大数を 10000 に設定できます。
    b. request_terminate_timeout: リクエストの処理のタイムアウトを指定します。この時間を超えてリクエストが処理されない場合、リクエストは強制終了されます。コマンド「request_terminate_timeout = 60s」を使用すると、リクエスト処理のタイムアウトを 60 秒に設定できます。

2. コードの最適化

  1. キャッシュ データ
    キャッシュを使用すると、データベースなどのリソースへのアクセス頻度が減り、パフォーマンスが向上します。以下は、Memcached をキャッシュとして使用する簡単なサンプル コードです。

    <?php
    $memcached = new Memcached();
    $memcached->addServer('localhost', 11211);
    
    $key = 'cache_key';
    $data = $memcached->get($key);
    if (!$data) {
     $data = fetchDataFromDatabase();
     $memcached->set($key, $data, 60);
    }
    
    // 使用$data进行其他操作
    ?>
  2. データベースの合理的な使用
    データベースは Web サイトの重要な部分であり、データベースの合理的な使用パフォーマンスを向上させることができます。以下は、データベース操作に PDO を使用し、前処理を有効にする簡単なサンプル コードです:

    <?php
    $dsn = 'mysql:host=localhost;dbname=test';
    $user = 'username';
    $password = 'password';
    $options = array(
     PDO::ATTR_EMULATE_PREPARES => false, // 禁用准备好的语句的模拟
     PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION // 启用错误处理
    );
    
    $pdo = new PDO($dsn, $user, $password, $options);
    
    $stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');
    $stmt->bindValue(':id', $id, PDO::PARAM_INT);
    $stmt->execute();
    
    $data = $stmt->fetch(PDO::FETCH_ASSOC);
    ?>

3. コード パフォーマンスの最適化

  1. IO 操作の削減
    IO 操作はパフォーマンスのボトルネックの 1 つです。IO 操作を減らすと、コードの実行効率が向上します。以下は、ファイル キャッシュを使用してデータベースへの頻繁な呼び出しを減らす簡単なサンプル コードです。

    <?php
    $cacheFile = 'cache.txt';
    
    if (file_exists($cacheFile) && time() - filemtime($cacheFile) < 60) {
     $data = file_get_contents($cacheFile);
    } else {
     $data = fetchDataFromDatabase();
     file_put_contents($cacheFile, $data);
    }
    
    // 使用$data进行其他操作
    ?>
  2. ループ内でクエリを繰り返すことを避ける
    ループ内でクエリを繰り返すと、パフォーマンスが大幅に低下します。クエリ結果をキャッシュすることで、クエリの繰り返しを回避できます。以下は、配列を使用してクエリ結果をキャッシュする簡単なサンプル コードです:

    <?php
    $query = 'SELECT * FROM products';
    $result = array();
    
    foreach ($pdo->query($query) as $row) {
     if (isset($result[$row['key']])) {
         $result[$row['key']][] = $row;
     } else {
         $result[$row['key']] = array($row);
     }
    }
    
    // 使用$result进行其他操作
    ?>

結論:
PHP-FPM の構成を最適化し、キャッシュとデータベースを合理的に使用することで、コードのパフォーマンスを最適化することで、Web サイトの応答時間とスループットを大幅に向上させることができます。実際のアプリケーションでは、サーバーのパフォーマンスや負荷に応じて構成を調整し、適切なキャッシュ機構やデータベース操作方法を使用し、不要な IO 操作やクエリの繰り返しを避ける必要があります。

参考:

  • PHP-FPM ドキュメント: http://php.net/manual/en/install.fpm.php
  • PHP ドキュメント: http : //php.net/manual/en/index.php

以上がPHP-FPM パフォーマンス向上ガイド: Web サイトの応答時間とスループットの最適化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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