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";
_
_localhost/script.php
_に5つの要求を行うと、最後の4つは最初の要求が終了するのを待ってから、同時に終了しました。
問題の解決を手伝ってください。この問題の解決に必要な情報が不足している場合は、通知してください。追加します。
Apacheは同時に複数のリクエストを確実に処理できます。Apache構成内で間違いが発生しています。
使用しているApacheのバージョンとその構成方法によって異なりますが、一般的なデフォルト構成では、複数のスレッドを持つ複数のワーカーを使用して同時リクエストを処理します。これがどのように機能するかの概要については http://httpd.Apache.org/docs/2.2/mod/worker.html を参照してください。
あなたがそれに直面している理由は:どこかにロックがあります-たとえば、2つのリクエストが同じクライアントから来て、ファイルベースのセッションをPHP =:スクリプトが実行されている間、セッションは「ロック」されます。つまり、サーバー/クライアントは、ファイルを使用してセッションを開くことができるように、最初のリクエストが完了する(およびファイルがロック解除される)まで待機する必要があります。 2番目のユーザー。
リクエストは同じクライアントと同じブラウザからのものです。この場合、ほとんどのブラウザーは、サーバー側でこの動作を生成するものがない場合でも、要求をキューに入れます。
おそらくセッションのロックが原因です。セッション変数を編集する必要がない場合は、閉じてください。
セッションを操作し、script.phpの開始時に書き込みます
// manipulate writes, and unlock session file!
session_start();
$_SESSION['admin'] = 1;
$_SESSION['user'] = 'Username';
session_write_close(); // unlock session file, to another script can access
// start your script without php session block
sleep(30);
echo $_SESSION['user'];
// another script can run without wait this script finish
セッションのクローズを呼び出す前に、セッション内にスリープとphpinfoを含めてみてください。セッションのように見えます(5つすべてが同じものとして扱われ、最初のセッションが終了して終了します)。セッションIDが同じかどうかを確認してください。セッションを開いたままにしておくと、同時に処理されていることがわかります。
Apacheは、クライアント要求の処理方法を指示するさまざまなマルチプロセッシングモジュール(ApacheはこれらのMPMを呼び出します)を提供します。基本的に、これにより管理者は接続処理アーキテクチャを簡単に交換できます。これらは:
同様の問題が発生しました。サーバーへの接続中に、複数のリクエストがランダムにハングし続けました。
使用しないで、mpm構成を変更しようとしました。
最後に、これは私にとって問題を解決するようです。 (- https://serverfault.com/a/680075 から)
AcceptFilter http none
EnableSendfile Off
EnableMMAP off
異なるブラウザータブ/ウィンドウ/インスタンスで同時呼び出しを試みましたか?
Apacheはマルチスレッドであるため、並列要求を確実に処理できます。チェックすべきことがいくつかあります:
テスト用の適切なクライアント(Apacheベンチマークなど)を使用してリクエストを作成します。 https://httpd.Apache.org/docs/2.4/programs/ab.html を見てください。
Apacheの設定を確認してください。一度に1つの要求のように、奇妙な動作を引き起こす可能性があるいくつかの誤った設定があります。 httpd.confでforkとworkerのパラメーターを見てください。提案:テストにはすべてのデフォルトパラメータを使用します。