2012-05-06 11 views
11

これは数ヶ月前に実験を開始して以来、私は成功していない問題を解決しようとしてきました。symfony 1.4のセッションがランダムに失われました

症状::ランダムな間隔で、symfonyはセッション情報を失い、ユーザーをログアウトします。何とかサイトの負荷につながっているようです。負荷が高くなると、ユーザーはより頻繁にログアウトされ、30秒間ですら速くなる可能性があります。

環境::これが始まって以来、私はPHPバージョン、Webサーバー、セッションストレージ、symfonyバージョンを含む多くの設定を変更しました。現在の設定は次のとおりです。 Ubuntu 10.04、php 5.4.0、symfony 1.4.17、nginx 1.0.15 with FPM。ここでは、セッションストレージはfactories.ymlの中に設定されている方法です。

user: 
    class: myUser 
    param: 
     timeout:   86400 
     use_flash:  true 
    storage: 
    class: sfCacheSessionStorage 
    param: 
     cache: 
     class: sfMemcacheCache 
     param: 
      lifetime: 86400 
      host:  192.168.1.3 
      serializer: IGBINARY 
      mode:  compiled 
      port:  11211 

私はまた、セッションストレージのためのRedisを使用していたことを言及するようになったとはまだ問題を抱えていました。 次は何を試していいのか分かりません。他の誰かが同様のことを体験しましたか?この段階では、どんなヒントも高く評価されます。

更新日: 数ヶ月の検索と数多くの試行錯誤私はそれが並行性の問題であると思う。私たちのサイトはAJAXリクエストではかなり重いので、セッションハンドラに適切なロックメカニズムが実装されていない限り、セッションに関する問題が発生する可能性があることを知りました。 最初に私は方程式からsymfonyを削除しました。私はphpセッションを使うように設定しました。デフォルトのファイルセッションストレージでは、セッションを失うことはありません。それから、memcacheセッションストレージを使うようにphpを設定しました。確かに、私たちは失われたセッションを見始めました。私はmemcachedがメモリ不足ではないことを100%肯定しています。私は管理ツールをインストールしました。memcachedサーバは割り当てられた8GBの2%を使い果たしています(無駄なく、メモリは必要に応じて割り当てられます)。 次に、2番目のmemcachedサーバーを追加し、冗長性を使用するようにセッションハンドラを構成しました。これは大いに助けました、私はめったに失われたセッションを持っていません。今のところこれは許容される妥協である。

+0

セッション記憶機構としてmemcacheを使用していますか?もしそうなら、私はmemcacheが新しいものが来るようにmemcacheがセッションを捨てていると想像すべきです - memcacheストレージは保証されていません。使用可能なメモリをmemcacheに増やすか、別の永続化メカニズムを使用する方がよいでしょう。 – halfer

+0

私が言及したように私はデータを捨てないredisとして他のセッションストレージエンジンを使いました。私はmemcacheが1GB以上を使用するのを見たことがありませんが、最大8GBを使用するように設定されています。 – dcb

+0

ああ、私はそれを逃したかもしれない - その詳細が後の編集で追加されない限り。その動作は、おそらく 'ab'を使ってテスト中のdevサーバに出現していますか? PHP 5.4が必要ですか?そうでない場合は、5.3.xまたは5.2.xにさえ戻して、違いがあるかどうか確認してください。 – halfer

答えて

0

実際に私たちが過去数ヶ月間使用してきたセットアップはsymfonyが通常のphpセッション(キャッシュクラスではない)を使用するように設定されており、phpはmemcache拡張を使用するように設定されています)を使用して、2つの冗長memcacheサーバーにセッションを格納します。 memcacheサーバーの1つを取り出した場合、すぐに失われたセッションが表示されます。

これは実際に仕事をした唯一の設定です。

1

何らかの理由で、何らかの理由でmemcacheが何度も失敗してしまい、新しいセッションを作成してユーザーをログアウトさせるようです。

Jestepの提案によれば、問題がなくなるかどうかを確認するために、memcacheを式から取り除くことでこれを証明する必要があります。

もしそうなら、問題はあなたがmemcacheまたはmemcache自体と話している方法です。

+0

私はファイルストレージに切り替えました。 – dcb

関連する問題