C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: 「セッション状態要求をセッション状態・・・」エ


(過去ログ 22 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■9248 / inTopicNo.1)  「セッション状態要求をセッション状態・・・」エラーについて
  
□投稿者/ 向井 (7回)-(2007/10/23(Tue) 15:08:33)

分類:[ASP.NET (VB)] 

いつもお世話になっております。向井です。
毎度回答の早さに大変驚いていますし、満足しています。

さて。本題ですが、次のエラーが気まぐれ的に発生して困っております。

Message:セッション状態要求をセッション状態サーバーに対して作成できませんでした。ASP.NET 状態サービスが開始されていて、クライアントとサーバーのポートが同じであることを確認してください。サーバーがリモート コンピュータ上にある場合、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection の値を調べて、このコンピュータがリモート要求を受け付けることを確認してください。サーバーがローカル コンピュータ上にあり、上記のレジストリ値が存在していないか 0 に設定されている場合、状態サーバー接続文字列ではサーバー名に 'localhost' または '127.0.0.1' を指定しなければなりません。
場所 System.Web.SessionState.OutOfProcSessionStateStore.MakeRequest(StateProtocolVerb verb, String id, StateProtocolExclusive exclusiveAccess, Int32 extraFlags, Int32 timeout, Int32 lockCookie, Byte[] buf, Int32 cb, Int32 networkTimeout, SessionNDMakeRequestResults& results)
場所 System.Web.SessionState.OutOfProcSessionStateStore.DoGet(HttpContext context, String id, StateProtocolExclusive exclusiveAccess, Boolean& locked, TimeSpan& lockAge, Object& lockId, SessionStateActions& actionFlags)
場所 System.Web.SessionState.OutOfProcSessionStateStore.GetItemExclusive(HttpContext context, String id, Boolean& locked, TimeSpan& lockAge, Object& lockId, SessionStateActions& actionFlags)
場所 System.Web.SessionState.SessionStateModule.GetSessionStateItem()
場所 System.Web.SessionState.SessionStateModule.BeginAcquireState(Object source, EventArgs e, AsyncCallback cb, Object extraData)
場所 System.Web.HttpApplication.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
場所 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)


エラーメッセージで指摘されている内容はすでにこの通り設定しているにもかかわらず発生します。

■web.config(抜粋)
<sessionState
  mode="StateServer"
  stateConnectionString="tcpip=127.0.0.1:42424"
  timeout="240"
  stateNetworkTimeout="10"
  >
</sessionState>
※StateServerはWebサーバにとってローカルに存在します。WebサーバはWindows Server 2003です。

■AllowRemoteConnection値
レジストリ値が存在していない

何かの条件が整うとエラーが発生しているようなのですが、その条件がわかりません。

エラーの発生する画面(.aspx)もその時々で異なります。

■環境:
ASP.NET 2.0
ASP.NET AJAX(AjaxControlToolKitも)
VB.NET 2.0
Windows Server 2003
IIS 6.0

とにかく検索にヒットしないので調査に難航しています。

あいまいな状況説明で回答しにくいとは思いますが、
何か思い当たる点があれば、ご教授のほどよろしくお願いします。

--

引用返信 編集キー/
■9251 / inTopicNo.2)  Re[1]: 「セッション状態要求をセッション状態・・・」エラーについて
□投稿者/ 渋木宏明(ひどり) (489回)-(2007/10/23(Tue) 16:00:43)
渋木宏明(ひどり) さんの Web サイト
> 何かの条件が整うとエラーが発生しているようなのですが、その条件がわかりません。

負荷は?

引用返信 編集キー/
■9258 / inTopicNo.3)  Re[2]: 「セッション状態要求をセッション状態・・・」エラーについて
□投稿者/ 向井 (8回)-(2007/10/23(Tue) 19:07:33)
返事が遅くなってすみません。

No9251 (渋木宏明(ひどり) さん) に返信
>>何かの条件が整うとエラーが発生しているようなのですが、その条件がわかりません。
>
> 負荷は?
>

高かったかもしれません。
ログを確認すると、他ユーザがExcel出力していた際に起こった模様です。
どの程度重いExcel出力だったかは不明ですが、
Excel出力時はCPUが100%になってしまうため、負荷が高かった可能性は十分ありそうです。
これが原因なのでしょうか。

ただ、そうだとすると腑に落ちない点は
Excel出力は頻繁に行われているにもかかわらず、
それに比べてエラーの発生頻度が少ない気がする点です。

また、これが原因の場合、回避方法はあるのでしょうか。
StateServerの欠点ととらえていいのでしょうか。

すみませんが、よろしくお願いします。


引用返信 編集キー/
■9261 / inTopicNo.4)  Re[3]: 「セッション状態要求をセッション状態・・・」エラーについて
□投稿者/ 渋木宏明(ひどり) (490回)-(2007/10/23(Tue) 21:27:42)
渋木宏明(ひどり) さんの Web サイト
2007/10/23(Tue) 22:10:12 編集(投稿者)

> これが原因なのでしょうか。

どーでしょう?

判断材料となる情報が「ステートサーバが応答しないことがある」だけなので、可能性の1つとして挙げました。

イベントログには何か使えそうな情報は残ってませんか?

> ただ、そうだとすると腑に落ちない点は
> Excel出力は頻繁に行われているにもかかわらず、
> それに比べてエラーの発生頻度が少ない気がする点です。

これも「Excel 出力」というのが具体的に何をやってるのかも分からないんで、なんとも。

「Excel 出力」処理の内容や量と、現象の間に相関はないんですか?

> また、これが原因の場合、回避方法はあるのでしょうか。
> StateServerの欠点ととらえていいのでしょうか。

仮にステートサーバが接続を受け付けないほどの高負荷が起きているとして、その原因を突き止めなければ回避策もたてられないですね。

システムの処理能力は有限なので、高負荷状態で応答が鈍くなるのはステートサーバに限った話ではないと思いますよ。

引用返信 編集キー/
■9279 / inTopicNo.5)  Re[4]: 「セッション状態要求をセッション状態・・・」エ
□投稿者/ 向井 (9回)-(2007/10/24(Wed) 10:39:56)
2007/10/24(Wed) 10:46:28 編集(投稿者)
2007/10/24(Wed) 10:44:27 編集(投稿者)

> イベントログには何か使えそうな情報は残ってませんか?

特に有力な情報はなさそうです。
念のため、本文の末尾にイベントログを貼り付けました。

> 「Excel 出力」処理の内容や量と、現象の間に相関はないんですか?

その後の聞き込みで、その時行われたExcel出力は、5分以上かかる非常に高負荷な処理だったことが分かりました。
その処理の中ではセルを結合したり罫線を引いたり枠線を消したりその他様々な処理を行っています。
エラーが発生した瞬間に何をしていたかというレベルまで詳細な記録は残っていませんので
残念ながらこれ以上のご説明はできません。。

> 仮にステートサーバが接続を受け付けないほどの高負荷が起きているとして、その原因を突き止めなければ回避策もたてられないですね。
>
> システムの処理能力は有限なので、高負荷状態で応答が鈍くなるのはステートサーバに限った話ではないと思いますよ。
>

応答が鈍くても結果が正しく返ってくるならば、今回の状況からすればまだマシです。
今回は例外が発生します。
InProcの時にはこんなことはありませんでした。
ですので、StateServerの欠点と考えました。
いかがでしょう。皆さんはこのエラーに遭遇されたことはありませんか。

とりあえずの対策として、Global.asaxのApplication_Errorで
このHttpExceptionかつメッセージが今回のメッセージと一致した場合は
「只今アクセスが集中しています。しばらくお待ちの後再度アクセスしてください」
などのようなエラー画面に遷移させるようにしたいと思います。

いかがでしょうか。

--

■イベントログ(アプリケーションの警告)
イベント コード: 3009
イベント メッセージ: セッション状態要求をセッション状態サーバーに実行できません。詳細: 最終段階='状態サーバーからの応答を読み取り中です。'、エラー コード=0x8007274C、送信データのサイズ=0
イベント時間: 2007/10/23 13:43:57
イベント時間 (UTC): 2007/10/23 4:43:57
イベント ID: 1b77d9b801eb4d5783f14ce68b1fb19b
イベント シーケンス: 2581
イベント発生: 1
イベント詳細コード: 50016

アプリケーション情報:
アプリケーション ドメイン: /LM/W3SVC/1/Root/xxxxx-1-128375677393838300
信頼レベル: Full
アプリケーションの仮想パス: /xxxxxx
アプリケーション パス: C:\xxxxxxxxxxxxxxx
コンピュータ名: xxxxxx

プロセス情報:
プロセス ID: 9552
プロセス名: w3wp.exe
アカウント名: NT AUTHORITY\NETWORK SERVICE

例外情報
例外の種類: HttpException
例外メッセージ: セッション状態要求をセッション状態サーバーに対して作成できませんでした。ASP.NET 状態サービスが開始されていて、クライアントとサーバーのポートが同じであることを確認してください。サーバーがリモート コンピュータ上にある場合、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection の値を調べて、このコンピュータがリモート要求を受け付けることを確認してください。サーバーがローカル コンピュータ上にあり、上記のレジストリ値が存在していないか 0 に設定されている場合、状態サーバー接続文字列ではサーバー名に 'localhost' または '127.0.0.1' を指定しなければなりません。

要求情報:
要求 URL: http:///xxxx/xxxxx/xxxxxxx.aspx?id=xxxxx&displayMode=ViewMode
要求パス: /xxxx/xxxxx/xxxxxxx.aspx
ユーザーのホスト アドレス: xxx.xxx.xxx.xxx
ユーザー: xxxxxx
認証済み: True
認証の種類: Forms
スレッド アカウント名: NT AUTHORITY\NETWORK SERVICE

スレッド情報:
スレッド ID: 8
スレッド アカウント名: NT AUTHORITY\NETWORK SERVICE
偽装: False
スタック トレース:


カスタム イベントの詳細:

詳細な情報は、http://go.microsoft.com/fwlink/events.asp の [ヘルプとサポート センター] を参照してください。

引用返信 編集キー/
■9288 / inTopicNo.6)  Re[5]: 「セッション状態要求をセッション状態・・・」エ
□投稿者/ 魔界の仮面弁士 (484回)-(2007/10/24(Wed) 11:39:47)
もしかして、サーバサイドで Excel を操作しておられるのでしょうか?
http://support.microsoft.com/kb/257757/ja

No9279 (向井 さん) に返信
>>「Excel 出力」処理の内容や量と、現象の間に相関はないんですか?
> その後の聞き込みで、その時行われたExcel出力は、5分以上かかる非常に高負荷な処理だったことが分かりました。

たとえば、エラーメッセージや確認ダイアログ等の、なんらかの表示等が行われていた場合、
そのメッセージに応答するまで、Excel は次の動作を受け付けません。(メソッド呼び出しが失敗します)

あるいは、あるメソッド呼び出しなどに対して、時間のかかる複雑な(または大量の)処理
――たとえば印刷位置の調整や、セル値の再計算、条件付き書式など――が発生するような場合、
その処理が終わるまでの間、呼び出し側の処理がブロックされるため、これが
負荷を高めてしまう要因となるかも知れません。

# ステートサーバの導入経験は無いので、外しているかも。
引用返信 編集キー/
■9303 / inTopicNo.7)  Re[6]: 「セッション状態要求をセッション状態・・・」エ
□投稿者/ 向井 (10回)-(2007/10/24(Wed) 14:24:48)
ご回答ありがとうございます。

> もしかして、サーバサイドで Excel を操作しておられるのでしょうか?

そうなんです。これもそうする以外に方法がありませんでした。
Webアプリケーションで帳票出力する場合、
何か別の手段で対応されている方がいらっしゃれば教えてください。
マクロを仕込んだExcelをダウンロードさせて、
ファイルを開いた際に実行するのでしょうか?

> たとえば、エラーメッセージや確認ダイアログ等の、なんらかの表示等が行われていた場合、
> そのメッセージに応答するまで、Excel は次の動作を受け付けません。(メソッド呼び出しが失敗します)

Excel出力は正常に終了していますので、このような事はなかったのではないかと思っています。

> あるいは、あるメソッド呼び出しなどに対して、時間のかかる複雑な(または大量の)処理
> ――たとえば印刷位置の調整や、セル値の再計算、条件付き書式など――が発生するような場合、
> その処理が終わるまでの間、呼び出し側の処理がブロックされるため、これが
> 負荷を高めてしまう要因となるかも知れません。

そういうことが高負荷になる原因だったのですか。
これは盲点でした。ありがとうございます。
セル値の再計算や条件付き書式は設定していないと思うので大丈夫だと思いますが、
印刷設定は次のようにしてありますので調整が入っていそうな気がします。
・「次のページ数にあわせて印刷」にON(横1×縦1)(=つまり、帳票が1ページに収まるよう設定)
・「ページ中央」の「垂直」「水平」どちらもON

この設定はこれまでExcel出力処理の最初に行っていました。
なので、その後の各セルへの書き込みなど各種処理が実行される度に
印刷位置の調整が行われていたのだと推測します。

で、この設定をExcel出力の最後にするよう変更してみたのですが、
パフォーマンスに変化はありませんでした。
CPUも処理中は常に100%です。

ご指摘には非常に納得できただけに、改善できないのが非常に歯がゆいです。
対応がまずかったでしょうか。

私の中ではExcel出力時にCPU100%になることは仕方ないことだと思い込んでいたのですが、
そうではないのでしょうか。

引用返信 編集キー/
■9309 / inTopicNo.8)  Re[7]: 「セッション状態要求をセッション状態・・・」エ
□投稿者/ 魔界の仮面弁士 (487回)-(2007/10/24(Wed) 15:28:11)
No9303 (向井 さん) に返信
>>もしかして、サーバサイドで Excel を操作しておられるのでしょうか?
> そうなんです。これもそうする以外に方法がありませんでした。

(1) クライアント側が 2003 以降であれば、XML 形式のスプレッドシートを使えます。

(2) あるいは、ExcelCreator 2007 (サーバ版)のように、サーバ側での Excel 生成を
 サポートしたパッケージ製品を用いるという選択肢もあるかと。

(3) あとは、Web サーバで実行させず「実行依頼」のキューにためるようにしておき、
 Web サーバとは別のアプリケーションサーバで、Excel を作成するという手もあります。
 (負荷が高くなった場合は、アプリケーションサーバを増やせば済むので)

(4) ユーザ側の操作が増えても良いなら、「データを埋め込んだスクリプトファイル(*.wsf 等)」や
 「VBA コード入り Access mdb」などをサーバ側で生成して、それをダウンロード実行させるようにするとか。

(5) それ以外では、「ブラウザからアクセスする Web アプリ」とするかわりに、
 「Excel から Web サービスにアクセスして帳票作成」という流れにするとか。

# 当方で実装経験があるのは、3 と 4 です。


> 印刷設定は次のようにしてありますので調整が入っていそうな気がします。
印刷設定に、PageSetup オブジェクトを使う場合は、注意が必要です。
プリンタドライバによっては、この部分で時間がかかる事があります。

Excel の印刷設定画面の場合、[OK]ボタンを押したときに、各種設定(左余白、上余白、フッタ設定など)が
一度に決定されることになりますが、PageSetup の場合は、設定が一度に決定されるわけではなく、
プロパティの値を書き換えるたびに印刷設定が更新されるからです。

このため、たとえばダイアログからの指定であれば、印刷設定完了までに 0.1 秒かかるプリンタドライバだと、
PageSetup では、「0.1 秒×設定項目数」となり、数秒以上の時間を要する結果となります。
# 当方の場合、このことが原因で、プリンタを入れ替える羽目になった事が…。

PageSetup ではなく、ExecuteExcel4Macro メソッド + "PAGE.SETUP(〜〜)" マクロ関数による
設定であれば、設定時間は最小限に抑えられます。


> で、この設定をExcel出力の最後にするよう変更してみたのですが、
> パフォーマンスに変化はありませんでした。
可能性の一つであるとはいえ、単純に印刷設定だけに目を向けてみても駄目でしょう。
他のボトルネック要因もありえるでしょうし。

調べるのであれば、『5分以上かかる非常に高負荷な処理』の中で、具体的にどのメソッド呼び出しに
時間がかかっているのかを、ログ等を出力して追跡する必要があるかと思います。

> CPUも処理中は常に100%です。
念のため、カーネル時間(赤グラフ)の率が高くなっていないことを確認しておいてください。
(状況からして、恐らくはユーザーモード側の負荷だとは思いますが)
http://www.voice-com.net/news/winpfm/


> 私の中ではExcel出力時にCPU100%になることは仕方ないことだと思い込んでいたのですが、
> そうではないのでしょうか。
いずれにせよ、一つの要求だけで 100% に達しているとしたら、Web サーバとしては致命的かと。
連続した出力要求があった場合、簡単にパンクしてしまいますので、もしも負荷が下がらないようであれば
問題が大きくなる前に、構成を見直す事も検討した方が良いかもしれません。
引用返信 編集キー/
■9315 / inTopicNo.9)  Re[5]: 「セッション状態要求をセッション状態・・・」エ
□投稿者/ 渋木宏明(ひどり) (497回)-(2007/10/24(Wed) 16:12:57)
渋木宏明(ひどり) さんの Web サイト
> その後の聞き込みで、その時行われたExcel出力は、5分以上かかる非常に高負荷な処理だったことが分かりました。

5分もかかるんじゃ、ステートサーバ云々の前にブラウザ側がタイムアウトしたりしませんか?
その前にオペレータが辛抱たまらんと思いますが。

> InProcの時にはこんなことはありませんでした。

そりゃそうでしょう。

InProc であれば「接続」は必要ありませんから。
> ですので、StateServerの欠点と考えました。

高負荷が原因であるなら「欠点」は言いすぎですね。
そういう事態を招いた設計やシステム構成に問題があるものと受け取るべきです。

>Webアプリケーションで帳票出力する場合、
>何か別の手段で対応されている方がいらっしゃれば教えてください。

「帳票」とはプリンタ出力のことですか?
また、帳票の出力先は?

出力形式が Excel 限定で無いなら

・Crystal Report で作成、プリンタ出力
・PDF を作成

とゆー手があるかと。

>私の中ではExcel出力時にCPU100%になることは仕方ないことだと思い込んでいたのですが、
>そうではないのでしょうか。

そりゃそうなんですが、そもそも Office アプリケーションをサーバサイドで使用することは Microsoft も推奨してないわけなので、こういう事態が起こるであろうことは開発者側で想定しておかないとだめなんです。

具体的な対応方法は、弁士さんが示してくれているとおりです。

引用返信 編集キー/
■9357 / inTopicNo.10)  Re[6]: 「セッション状態要求をセッション状態・・・」エ
□投稿者/ 向井 (11回)-(2007/10/25(Thu) 09:39:26)
みなさんのおかげで色々わかりました。

>(1) クライアント側が 2003 以降であれば、XML 形式のスプレッドシートを使えます。
> ・・(省略)・・

Excel出力の具体的方法のご提供、ありがとうございます。
マイクロソフトが推奨していないことを最近すっかり忘れていました。
渋谷さんもおっしゃるとおり、開発側で想定しておくべきことだったように思います。

> 印刷設定に PageSetup オブジェクトを使う場合は注意が必要です。

貴重な情報のご提供ありがとうございます。はじめて知りました。
しかし結果としては残念ながら、PageSetup にアクセスする処理を外してみても
パフォーマンスに違いはありませんでした。うーん、せっかく教えてくださったのに申し訳ない思いです。

> 可能性の一つであるとはいえ、単純に印刷設定だけに目を向けてみても駄目でしょう。
> 他のボトルネック要因もありえるでしょうし。

そうですね。答えを急いでしまいました。

> 調べるのであれば、『5分以上かかる非常に高負荷な処理』の中で、具体的にどのメソッド呼び出しに
> 時間がかかっているのかを、ログ等を出力して追跡する必要があるかと思います。

プロファイラ(CLR_Profiler)を使って調査してみます。
(昨日やってみましたが、「Profile ASP.NET」をすると「Wating For Connection..」から進まなくなり、使用方法を調べているところです。)

> 念のため、カーネル時間(赤グラフ)の率が高くなっていないことを確認しておいてください。

これは大丈夫でした。
CPUトータルは100%でしたが、カーネルは50%付近でした。

> いずれにせよ、一つの要求だけで 100% に達しているとしたら、Web サーバとしては致命的かと。

そうですね。これが根本的な問題だと思いました。
ハードウェアでの解決を提案してみます。

引き続き調査してみます。
ありがとうございました。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -