17

AMPPSをインストールしました。

私の Apache サーバーは一度に複数の php リクエストを処理できません (たとえば、localhost/script.php複数回呼び出すと、それらは連続して処理されます)。script.phpのみで構成されてい<?php sleep(10); ?>ます。

MaxClientsディレクティブが同時アクセス構成を担当していることを読みましたがhttpd.conf、まったく欠落しています。

Xdebug を無効session_write_close();にして、スクリプトの先頭に書き込むことができませんでした。

ファイルの先頭に追加session_start();すると、コードは次のようになりました。

<?php

session_start();
session_write_close();
sleep(10);
phpinfo();

echo "Done";

に 5 つのリクエストを行ったときlocalhost/script.php、最後の 4 つは最初のリクエストが終了するのを待ってから同時に終了しました。

問題の解決を手伝ってください。この問題を解決するために必要な情報が不足している場合は、お知らせください。追加します。

4

8 に答える 8

7

おそらくセッションのロックが原因です。セッション変数を編集する必要がない場合は、閉じてください。

http://php.net/manual/en/function.session-write-close.php

于 2016-05-25T08:20:00.823 に答える
0

セッションを閉じる前に、セッション内に sleep と phpinfo を含めてみてください。セッションのように見えます(5つすべてが同じように扱われ、最初のセッションが終了して終了します)。セッション ID が同じかどうかを確認してください。セッションを開いたままにしておくと、それらが同時に処理されていることがわかります。

于 2016-06-09T21:48:13.377 に答える
0

Apache は、クライアント要求の処理方法を指示するさまざまなマルチプロセッシング モジュール (Apache はこれらの MPM を呼び出します) を提供します。基本的に、これにより、管理者は接続処理アーキテクチャを簡単に交換できます。これらは:

  1. mpm_prefork:この処理モジュールは、リクエストを処理するためにそれぞれ 1 つのスレッドでプロセスを生成します。各子は一度に 1 つの接続を処理できます。
  2. mpm_worker:このモジュールは、それぞれが複数のスレッドを管理できるプロセスを生成します。これらの各スレッドは、単一の接続を処理できます。プロセスよりも多くのスレッドがあるため、これは、新しい接続が空きプロセスを待たずに、空きスレッドをすぐに取得できることも意味します。
  3. mpm_event:このモジュールは、ほとんどの状況でワーカー モジュールに似ていますが、キープアライブ接続を処理するように最適化されています。ワーカー MPM を使用すると、接続が維持されている限り、リクエストがアクティブに行われているかどうかに関係なく、接続はスレッドを保持します。
于 2016-06-09T11:28:49.083 に答える
0

異なるブラウザー タブ/ウィンドウ/インスタンスで同時呼び出しを試みましたか?

Apache はマルチスレッドであるため、並列リクエストを確実に処理できます。確認すべき点がいくつかあるようです:

  • テスト用の適切なクライアント (Apache ベンチマークなど) でリクエストを行います - https://httpd.apache.org/docs/2.4/programs/ab.htmlをご覧ください。

  • Apache の設定を確認します。一度に 1 つのリクエストを行うなど、奇妙な動作を引き起こす可能性のある間違った設定がいくつかあります。httpd.conf で fork および worker パラメーターを確認してください。提案: テストにはすべてデフォルトのパラメータを使用してください。

于 2016-06-08T05:24:10.947 に答える
-1

セッションの保存をファイルからデータベースに移動できます-待機せずに一度にすべてのファイルを要求する可能性があるよりも-または-スクリプトでセッションが必要ない場合はオフにします(使用しないでくださいsession_start();)

于 2016-05-25T08:37:21.353 に答える