テストとして次のスクリプトを作成しましたが、一度に2つのクライアントに対してのみサーバーであるように見えます。
<?php
$time = time();
$timediff = 0;
do
{
$timediff = time() - $time;
usleep(1);
}while($timediff <= 1);
echo date('G:i:s', $time)." - ".date('G:i:s', time());
?>
LAMPサーバーの結果:
started
各スレッドは同時に正しく動作しているように見えます。これは、 result
(phpがエコーバックしたもの)と2つの新しいスレッドごとに、実際に終了するのにさらに2秒(time
)かかることで確認されています。
各スクリプトの終了には2秒かかるようです。その後、次の2つが提供されます。これはばかげています。理由もなく、12GBのRAMを搭載したクアッドコア3.2GHzサーバーが人々をキューに入れているからです。(システムモニター)によるとhtop
、apache2によって使用されているCPUコアは2つだけです。
lighttpdとphp5-fpmを実行しているdebian-squeezeサーバーでスクリプトを再試行しましたが、これはまったく異なるセットアップですが、同じ結果が得られました。コーディングが悪いのか、それとも他の何かなのかわかりません。
私はすでにコメントアウトしようとしましたが、すべての(両方の)コアでCPU使用率が100%でusleep()
あるという事実を除いて、まったく同じ結果が得られます。htop
usleepをオンに1
すると、各コアで15%の使用率が示され、usleepをオンにすると、500
それぞれ6%に達することはほとんどなく、サーバーが一度に2ページよりもはるかに多くのページを提供できる必要があることが確認されます。
なぜこれが起こるのか誰か教えてもらえますか?