7

cPanel を使用して、共有ホスティング環境で多数の PHP メンテナンス スクリプトを実行しています。ほとんどのスクリプトは 3 ~ 4 時間ごとに実行する必要があり、その実行を簡素化するために、実行する必要があるスクリプト (存在する場合) をチェックし、必要に応じて実行するスケジューラ スクリプトを作成しました。cron でスケジューラ スクリプトを 5 分ごとに実行するように設定しました。スクリプトは、現在予定されているメンテナンス タスクがないことを検出した場合、何もしません。スケジューラを呼び出すオーバーヘッドにより、約 5 つの短い SQL クエリが実行されます (したがって、これらは 5 分ごとに実行されます)。

私のホストが許可された制限をはるかに超えていると主張して、MySQL の使用率が高いと不平を言うまで、すべてが正常に機能していました。スケジューラの cron ジョブを無効にした後、リソースの使用量が 0 になりました。

  • cron ジョブを無効にする前: MySQL proc の数 (平均) - 0.97
  • cron ジョブを無効にした後: MySQL proc の数 (平均) - 0.00

奇妙なことに、cron ジョブを削除した後も、数時間ごとにブラウザから手動でスケジューラ スクリプトをアクティブにし続けていました。スクリプトはまだ実行されていたので、MySQL プロセスの平均数が劇的に減少したことに非常に驚きました。cron ジョブを無効にする前に、スケジューラとメンテナンス スクリプトによって実行された SQL クエリの数を記録し始めました。

  • cron ジョブを無効にする前: 1 日あたり 9899 件のクエリ (平均)
  • cron ジョブを無効にした後: 1 日あたり 9552 クエリ (平均)

そのため、スケジューラーを手動で呼び出した場合でも、cron とほぼ同じ数の SQL クエリを実行しましたが、どういうわけか、MySQL の使用量は基本的にゼロにまで低下しました。

php コマンドを使用して cron ジョブを介して PHP スクリプトを実行する場合と、ブラウザーを介して呼び出す場合とでは、パフォーマンスに関連する違いはありますか? スクリプトでデータベース接続を明示的に閉じません。これは、実行の最後に自動的に行われることを理解していたからです。スクリプトが cron 経由で実行されているときに、この接続が開いたままになる可能性はありますか? cron を使用した場合の実質的なパフォーマンスの違いについて、他にどのような説明があるでしょうか?

4

1 に答える 1

3

通常、php.iniPHP とともに 2 つのファイルがインストールされます。

  • Apache 用の 1 つ
  • CLI (コマンド ライン インターフェイス) 用に 1 つ

通常、cron ジョブはphp -f yourfile.phpCLIphp.iniファイルを使用して実行されます。同様に、ネットワーク経由で apache を介してスクリプトを呼び出すと、apachephp.iniファイルが使用されます。さらに、apache では、仮想ホストの構成またはファイルでphp_valueorを使用できます。php_flag.htaccess

ほとんどの場合、apache と CLI の間に構成の違いがあります。

最初に頭に浮かぶのは、永続的な DB 接続です。永続的な接続は、DB サーバーへの接続のプールを使用します。このプールは、TCP ハンドシェイクを回避するために、リクエスト間で保持されます。つまり、開いたままになりますこれはパフォーマンスの最適化ですが、MySQL サーバーの接続制限を超える可能性があります。

私のシステム (Ubuntu) では、2 つのファイルのパスはphp.ini次のとおりです。

  • /etc/php5/apache2/php.ini
  • /etc/php5/cli/php.ini

フラグを介してコマンドラインでphp.ini実行するときに使用するファイルを指定できます。php-c

于 2013-01-15T19:45:59.043 に答える