2011-08-08 2 views
3

セッションは120分後にタイムアウトに設定されています。しかし、最近では、プロダクションサーバーの1つに数々の問題が発生しています。私はサーバーボックス自体にアクセスすることができないので、ここでは限られた情報に取り組んでいます。当社のウェブサイトが展開されている2つのサーバーがあります。 Sever Aは常にうまく動作しますが、サーバーBはセッションの問題が期限切れになっています。これは過去2週間ほど最近のことです。ASP.NET 3.5:セッションのタイムアウトが早すぎるのはなぜですか?

私は問題を直接特定するのに十分な情報を提供していないことを知っていますが、セッションが韻や理由なくリセットされる原因は何ですか?

+0

何らかのロードバランシングを使用していますか? – canon

答えて

4

明らかに、私はそれを修正しました。私は側の両方のサーバー側のためのIIS7のアプリケーションプールの詳細設定を開いて、1つの違いに気づいた:Regular Time Interval設定では、私が1740(デフォルト)に、サーバーAの設定を変更し、サーバーBにサーバーA上の5と1740年だったとの問題が直ちに停止しました。

奇妙なことに、これはサーバー管理者が1か月前にロールバックした直後に発生しました。どういうわけか何かがジャッキアップされていて、これらの設定が変更されているに違いありません。

私はまだ完全に私は物事を固定したのか理解していない、どちらかそれは単なる偶然だったか、その低5分の設定が問題でしたが。

誰もがこのことを忘れてしまったら、是非、そうしてください。

1

アプリプールがリサイクルされている理由はいくつかあります。で、(要求中)(分)

  1. ワーカープロセスのリサイクル
  2. リサイクルワーカープロセス
  3. ワーカープロセスのリサイクルを:それらのいずれかをASP.NETがリサイクルする原因となります超えた設定の数とがあります。以下の時間
  4. 最大仮想メモリ
  5. あなたはインプロセスセッション状態を使用している場合は、最大使用メモリ

、セッションアプリケーションプールがリサイクルされると、sは失われます。

設定が変更されていない場合は、おそらくメモリーリーク(実際のリークではない可能性がありますが、解放する必要がある場合は参照が保持されているため)に問題があります。

2台のサーバーを使用しているとします。セッション状態が失われている場合は、インプロセスセッション状態を使用しているようです。この場合、「スティッキーセッション」(後続の要求が同じサーバーに移動する)でロードバランシングを使用しているとしますか?

私が間違っていて、共有状態(SQL Serverセッション状態プロバイダまたは状態サーバーなど)を使用している場合、サーバー上でクロックが同期していない可能性がありますか?

+0

はい、2台の負荷分散サーバー。以前は "インプロセス"セッションという言葉は聞いたことがありませんでしたが、データベーステーブルではなくセッション用にサーバーメモリを使用しています。私は項目1-3についてもう少し調べなければならないでしょうが、4と5については、ハードウェアやOSの設定やweb.configに設定されているものに基づいていますか?言い換えれば、サーバーに8GBのRAMがある場合、それを上書きするweb.configに最大仮想/使用メモリ設定がありますか? – oscilatingcretin

0

最近あなたのサーバーに新しいサイトが追加されましたか? .net 4に転送するときにこの問題が発生し、新しい.net 4サイト用の新しいアプリケーションプールを作成するとは思われませんでした(.net 2/3.5とは対照的に)。 これは、同じアプリケーションプールで実行できないため、アプリケーションプールを常に再起動させました。

また、ループで自己固執している可能性のある新しいコードをアップロードしたことがあります。これにより、アプリケーションプールがクラッシュし、セッションが再開される可能性があります。

このサーバーにインストールするのを待っている更新プログラムがありますか。これも原因不明の問題があります。

1

いくつかの事が気になる:

@Steveモルガンは、それがロードバランサの問題が原因で発生することができ、あなたはインプロセスセッションと「スティッキー」のセッションを使用している場合は、言ったように。ロードバランシングでは、セッションは常に間違っている必要があります。なぜなら、「固い」とはセッションが2台のマシン間でバウンスしないことを意味しないからです。それはそれが起こりにくいことを意味します。ロードバランサに負荷がかかると、ユーザーは最初のサーバーとは異なるサーバーに送信されます。

アプリケーションプールリサイクルは、セッションを失う原因のもう1つです。再びインプロセスセッション管理を使用するためです。アウトオブプロセスに移行すると、の問題が隠されます。ここでの実際の問題は、ほとんど常に悪いコードの結果であるため、調査する必要があります。

私の推測では、複数の問題があると思います。まず、アウトオブプロセスセッションに移行し、状態サーバーを設定します。これはすぐに痛みを癒すでしょう。その後、バランサーとウェブサーバーの両方のログを調べて、より良いバランサーが必要かどうか、またはメモリリークを防ぐためにコードを変更する必要があるかどうかを確認します。

-1

作業溶液:あなたのサービスで

  1. スタート "ASP.NET状態サーバー"(それは常に起動するので、それが自動作成)
  2. あなたweb.configファイル(コピーにこれを追加であるように):!
<system.web> 
    <sessionState mode="StateServer" 
     stateConnectionString="tcpip=localhost:42424" 
     cookieless="false" 
     timeout="60" /> 
    <machineKey validationKey="DCB7132A24938F2166E362214ADAD861FA6B819E0A337F0E63257F87014A37B5EBC5D9F9AD107C38E3D3378BC35CBAF81407F3E4D8BA430FD65348DDCC469623" decryptionKey="DD09731F76271B2AAE6AE957626F8D1B8E3CBF11EF8E3CDDF01332CDF914D4B5" validation="SHA1" decryption="AES" /> 
</system.web> 
あなたは、マシンキーを所有しているか、または生成します:

は**注意http://aspnetresources.com/tools/machineKey


は今、あなたはあなたのweb.configファイルを変更、またはWebサービスを再起動し、アプリケーションプールをリサイクルすることができます - とのセッションが実施されています! プール内のWebガーデンを有効にして、パフォーマンスを向上させることもできます。

関連する問題