奇妙な理由で、ちょうど今日、私たちのサーバーはセッションの開始中に非常に遅いことに決めました。すべてのsession_startについて、サーバーは30秒後にタイムアウトするか、サーバーがセッションを開始するまでに約20秒かかります。これは非常に奇妙なことです。これは非常に長い間行われていないためです(サーバーが最後にこれを行ったのは約7か月前です)。データベースを介して実行するようにセッションを変更しようとしましたが、それは正常に機能しますが、現在のWebサイトが構築されているため、すべてのページに移動してセッションのロードを変更し、新しいセッションを含めるには数日かかるでしょう。ハンドラ。したがって、私の質問は残っています:
なぜそれがとても遅いのか、なぜ時々だけですか?
24GBのRAMを備えた専用のhetznerサーバーと、単純なWebサーバー(Xeonだと思いますが、よくわかりません)を実行するのに十分な速度のCPUで実行します。 Apache + fastcgi + php5設定のサーバーでdebianを実行します。
サーバーは、server-statusとtop
コマンドのどちらを使用しても、あまり負荷を報告しません。 Vnstat
は、ネットワークリンクに問題がないことを報告します(ここでも、ローカルセッションの処理が遅くなることはありません)。 IOtop
は、ハードドライブ全体を引き継ぐプロセスに問題がないことを報告します。セッションファイルが置かれているtmpフォルダーへの書き込みは、vimを介して行われると高速に動作します。
繰り返しになりますが、これを明確にするために、ここでの主な関心事は、セッションのDBバージョンまたはメモリキャッシュバージョンに切り替える必要があるかどうかではなく、なぜこれが発生するのかを確認することです。 PHP自体を除いて、正常に動作している。
[〜#〜] edit [〜#〜]:PHP tmpディレクトリの最大ファイルは2.9 MBなので、影響を与えるものはないと思います。
[〜#〜] update [〜#〜]:何が問題なのか、および/またはそれを修正する方法を理解できませんでしたが、memcached/dbセッションに切り替えた後、問題は消えました。
session_write_close();
を試しましたか?これにより、セッション変数の書き込み機能が無効になりますが、変数からデータを読み取ることはできます。そして、後でセッション変数を書き込む必要がある場合は、再度開きます。
私もこの問題に苦しんでいますが、これは魅力のように機能しました。これが私がすることです:
session_start(); //starts the session
$_SESSION['user']="Me";
session_write_close(); // close write capability
echo $_SESSION['user']; // you can still access it
同じ問題がありました。突然サーバーがリクエストを実行するのに30秒かかりました。 session_start()が原因であることに気付きました。最初のリクエストは高速でしたが、次の各リクエストの実行には秒かかりました。 c:\ wamp\tmpのセッションファイルが最初のリクエストによって約30秒間ロックされていました。この間、2番目の要求はファイルがロック解除されるのを待っていました。 rewrite_modおよび。htaccessと関係があることがわかりました。 rewrite_modを無効にして、.htaccessのすべての行をコメント化しましたが、これもまた魅力のように機能します。 Wampの設定や設定を変更した覚えがないので、なぜこれが起こったのかわかりません。
私もこの問題に遭遇しました。それはここで答えられました:
セッションはPHPによってロックされます。1つのスクリプトの実行中はスクリプトが同じセッションでスタックされると、これらの驚くほど長い遅延が発生する可能性があります。
これは古い質問ですが、サーバーでこの問題を修正しました。私がしたことは、cpanelのキャッシュマネージャーでドメインのバイパスキャッシュをオンにすることだけでした。
私のセッションはすぐに始まり、終了するまでに時間がかかりました。
各セッションは、Apacheによってテキストファイルとして保存されます。
セッションの開始を使用して既存のセッションを(たとえば、Cookie識別子を介して)再開すると、大きなセッションファイル(内部に大量のコンテンツがあるセッション)の開始が遅くなる可能性があります。
これが当てはまる場合は、おそらくアプリケーションがセッションに多くのデータを入れています。
Memcacheの設定が正しいかどうかを確認してください。 /etc/php.d/memcached.ini