2012-04-30 5 views
25

ちょっとした理由から、今日のサーバーはセッションの開始時に非常に遅くなることに決めました。すべてのsession_startに対して、サーバーは30秒後にタイムアウトするか、セッションを開始するのに約20秒かかります。これは非常に奇妙なことですが、これが非常に長い間これをしていないことが分かりました(私たちのサーバーがこれを最後にしたのは約7か月前でした)。セッションを変更してデータベースを実行しようとしましたが、正常に動作しますが、現在のWebサイトが構築されているので、すべてのページに移動してセッションの読み込みを変更して新しいセッションハンドラ。したがって、私の質問は残っています:session_startは非常に遅いですが(ときどきのみ)

どうしてそんなに遅く、なぜ時々だけですか?

私たちは、24GBのRAMを搭載した専用のヘッツナーサーバーと、シンプルなWebサーバーを実行するのに十分なCPUを搭載しています(Xeon、確信していますが、わかりません)。私たちはapache + fastcgi + php5の設定でサーバー上でdebianを実行します。

サーバーは、サーバーの状態とtopコマンドのどちらの負荷も報告しません。 Vnstatは、私たちのネットワークリンクに何の問題も報告していません(ローカルセッションの処理が遅くなることはありません)。 IOtopは、ハードドライブ全体を引き継ぐプロセスに問題はないことを報告します。セッションファイルが置かれているtmpフォルダに書き込むことは、vimを通して実行すると高速に動作します。

ここでも私の主な関心事は、DBやメモリキャッシュバージョンのセッションに切り替える必要があるかどうかということではありません。 PHP自体を除いて、うまく動作しているようです。

EDIT : 私たちのPHPのtmpディレクトリの最大ファイルは2.9 MBなので、影響を与えるものはありません。

UPDATE:私は何が間違っていたか、それを修正する方法は決して分かりませんでしたが、memcached/dbセッションに切り替えると問題は消えました。

+2

あなたの 'tmp'ディレクトリを見てください。 PHPはそこにセッションを保存します。何かが悪いかどうか確認してください。 – freshnode

+1

おそらくディスクやファイルシステムに何か問題がありますか? – Jon

+10

「すべてのページに行き、新しいセッションハンドラを組み込むためにセッションの読み込みを変更するには数日かかるでしょう」もしそうなら、その事実を最初に修正することを検討するべきです – PeeHaa

答えて

14

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 
+0

ありがとうございます。私は少なくともそれが今働くと思う。はるかに速く、完全な減速はまだありません:) –

0

各セッションは、apacheによってテキストファイルとして保存されます。

セッション開始が、(例えば、クッキー識別子などを介して)既存のセッションを再開するために使用される場合、大きなセッションファイル(内容の多いセッション)が遅くなることがありますか?

この場合、おそらくアプリケーションが多くのデータをセッションに入れています。

+0

tmpフォルダの中で最大のファイルは2.9MBなので、影響はありません。 – h2ooooooo

1

この問題も発生しました。 1つのスクリプトが実行されている間

Problem with function session_start() (works slowly)

セッションは、PHPによってロックされているので、スクリプトは同じセッションの下に積層された場合、彼らはこれらの驚くほど長い遅延が発生する可能性があります:それはここに答えました。

+0

これは単純に修正したかったですが、ロックされたセッションファイルであれば、サイト上のあらゆるユーザー(異なるコンピュータ上のオフィスからのアクセスを含む)にどのように起こったのか不思議です。おそらく、テキストファイルを使用していたため、ロックされた**同じ**ファイルが使用された可能性がありますか? – h2ooooooo

4

私は同じ問題を抱えていました。突然、サーバーは要求を実行するのに30秒かかりました。私はそれがのsession_start()のためだと気付いた。最初のリクエストは高速でしたが、次のリクエストごとに30秒が実行されました。 私は、c:\ wamp \ tmpのセッションファイルが最初の要求によって約30秒間ロックされていることを発見しました。この間、2番目の要求は、ファイルのロックが解除されるのを待っていました。 .htaccessと関係があることがわかりました。私はrewrite_modを無効にし、.htaccessのすべての行をコメントアウトして、魅力のように再び動作します。なぜ私はこの設定が変わったのか覚えていないのか分からない。

+0

私は完全にこの解決策に同意した..しかし、なぜ私は知らない。 –

0

memcacheの設定が正しいかどうかを確認してください。 in /etc/php.d/memcached.ini

関連する問題