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

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

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

Re[8]: timerが1日経つと止まってしまう


(過去ログ 84 を表示中)

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

■49587 / inTopicNo.1)  timerが1日経つと止まってしまう
  
□投稿者/ まこと (1回)-(2010/05/10(Mon) 20:19:20)

分類:[.NET 全般] 

皆様、お力をお貸し下さい。

Webで計測値を表示しているシステムを開発しています。
以下の条件でプログラムを作成したのですが、1日ぐらい経つと
タイマーが止まってしまい、画面が更新されなくなります。

どなたかお知恵をいただけないでしょうか?

●環境
 Windows Server 2003 
 IIS6.0
 VB.net

●やっている事
 Web画面にDBから取得した値を表示しています。
 更新間隔は6秒で、Timerイベントを使用しています。

●事象
 1.5日ぐらい何も触らないで表示さえておくと、画面の更新が止まってしまう。
 1日は正常に稼動しています。

●聞きたい事
 Timerイベントには最大期間のようなものがあるのでしょうか?
 (1日経ったら停止するなど)

※ワーカープロセスというものがある事を知り、
 IIS6.0のワーカープロセスは下記手順により無効にしています。
(参考URL:http://technet.microsoft.com/ja-jp/library/cc781036%28WS.10%29.aspx)
引用返信 編集キー/
■49588 / inTopicNo.2)  Re[1]: timerが1日経つと止まってしまう
□投稿者/ なちゃ (427回)-(2010/05/10(Mon) 20:34:39)
>Web画面にDBから取得した値を表示しています。
>更新間隔は6秒で、Timerイベントを使用しています。

Timerイベントって具体的に何でしょう?

Web画面に6秒間隔で更新というのは、ブラウザを開きっぱなしで、
ブラウザから6秒間隔でリクエストを投げさせているというわけではないんでしょうか?

それとももっと違ったやり方でしょうか?

>※ワーカープロセスというものがある事を知り、
> IIS6.0のワーカープロセスは下記手順により無効にしています。
>(参考URL:http://technet.microsoft.com/ja-jp/library/cc781036%28WS.10%29.aspx)

これをすることで何がどう変わるのかを理解して(明確な目的があって)やっているでしょうか?
それともなんとなく怪しそうだから、って感じでしょうか?

引用返信 編集キー/
■49589 / inTopicNo.3)  Re[2]: timerが1日経つと止まってしまう
□投稿者/ まこと (2回)-(2010/05/10(Mon) 20:43:41)
No49588 (なちゃ さん) に返信
> >Web画面にDBから取得した値を表示しています。
> >更新間隔は6秒で、Timerイベントを使用しています。
>
> Timerイベントって具体的に何でしょう?
>
> Web画面に6秒間隔で更新というのは、ブラウザを開きっぱなしで、
> ブラウザから6秒間隔でリクエストを投げさせているというわけではないんでしょうか?

→なちゃ様、言葉足らずですみませんでした。
 はい、ブラウザは開きっぱなしです。
 更新は以下の方法で行っております。
 
 System.Web.UI.Timer で 
 Interval=6000
 Time1.Enabled = True
 EnableViewState=True
 Time1.Tick関数を利用してDBアクセス、Page_Load()しております。

> >※ワーカープロセスというものがある事を知り、
> > IIS6.0のワーカープロセスは下記手順により無効にしています。
> >(参考URL:http://technet.microsoft.com/ja-jp/library/cc781036%28WS.10%29.aspx)
>
> これをすることで何がどう変わるのかを理解して(明確な目的があって)やっているでしょうか?
> それともなんとなく怪しそうだから、って感じでしょうか?

→理解してやっております。
 約29時間経った時点でSession情報がクリアーされたので上記対応を行いました。
 現在は、Sessionクリアーはされなくなりました。


以上、よろしくお願い致します。
引用返信 編集キー/
■49593 / inTopicNo.4)  Re[3]: timerが1日経つと止まってしまう
□投稿者/ はつね (1263回)-(2010/05/10(Mon) 21:50:55)
No49589 (まこと さん) に返信
> →理解してやっております。
>  約29時間経った時点でSession情報がクリアーされたので上記対応を行いました。
>  現在は、Sessionクリアーはされなくなりました。

セッション情報をInProcでもっているのでしょうか?
もしそうならばワーカープロセスを無効にするのではなく、SessionStateServerなどに
セッション情報を保存するように調整したほうがいいのでは?

引用返信 編集キー/
■49594 / inTopicNo.5)  Re[4]: timerが1日経つと止まってしまう
□投稿者/ かたぎり (20回)-(2010/05/10(Mon) 22:06:03)
そもそも論なのですが、
METAタグでRefreshさせてクライアント側から
ページの再表示処理をキックさせて
DBの最新内容を表示させるのではダメなのですか?

サーバー側のTimerプログラム絡みとか負荷絡みの計測だと意味がありませんけれど
WEBで何の計測をしようとしているのか判らないので、とりあえず、コメントだけ。

引用返信 編集キー/
■49598 / inTopicNo.6)  Re[5]: timerが1日経つと止まってしまう
□投稿者/ れい (916回)-(2010/05/11(Tue) 03:29:31)
No49593 (はつね さん) に返信
> セッション情報をInProcでもっているのでしょうか?
> もしそうならばワーカープロセスを無効にするのではなく、SessionStateServerなどに
> セッション情報を保存するように調整したほうがいいのでは?

更新するかどうか、その時刻はクライアントがスクリプトとして持っています。
また、今はセッションが残っているそうなので、その内容が壊れてクライアントスクリプトが壊れているというのも
ちょっと考えづらい。

なので、セッションは関係ないかと思います。


No49594 (かたぎり さん) に返信
> そもそも論なのですが、
> METAタグでRefreshさせてクライアント側から
> ページの再表示処理をキックさせて
> DBの最新内容を表示させるのではダメなのですか?

System.Web.UI.Timerのポストバックはスクリプトで、
MetaのRefreshはHTML層なので多少変わりそうですが…
どちらも普通にHTTP GETのはずなのであまり変わりそうにないなぁ。

でも、そういえば。
私のところでも、とある物理量のリアルタイムモニタをしていますが、それはrefreshでした。
Windows Server 2003のIISでやってますが、1か月くらいの連続稼働では止まりません。
ただし10分程度の更新間隔なので更新回数は1か月で31x24x6 = 4464。
6秒更新だと1日で24x60x10 = 14400。

うーん。動いても当然か。


で、私も「そもそも論」で参加しますが。

6秒間隔で延々とリクエストされ続ける、というのはかなり負荷が高くなりますよね。
HTTP/TCPの設計思想からいっても、6秒の更新間隔を要求するのはぎりぎりです。
転送量にもよりますが、1日ずっとなら、DoSと間違われてもおかしくないくらいかと。

IISにDoSフィルタが入っててもおかしくないように思いますし、
#すみませんが、本当に入っているのかは知りません。結構細かいフィルタが一杯はいってることしかわかりません。
また、今後HTTPの途中に、1日ずっと続くようなリクエストを止めるフィルタが入ってもおかしくありません。

転送回数も上記の様に1日で14400になります。
レンダリングエンジンはかなり重く、バグも多いものなので
20000回ページを表示したら1回くらい止まってもIE6なら仕方ないような気もしますし…
#むしろ頑張ってる方かも。

つまり、設計に無理があると思います。
本当に6秒更新とASP.Netが必要なのか検証したほうがよいかと。

Ajax系の動的更新を使うとか。
#Ajaxも連続稼働に耐えるかちょっと微妙ですが。
引用返信 編集キー/
■49603 / inTopicNo.7)  Re[4]: timerが1日経つと止まってしまう
□投稿者/ まこと (4回)-(2010/05/11(Tue) 09:25:02)
はつね様
 返信ありがとうございます。
 下記インラインコメントにて失礼致します。

> セッション情報をInProcでもっているのでしょうか?
> もしそうならばワーカープロセスを無効にするのではなく、SessionStateServerなどに
> セッション情報を保存するように調整したほうがいいのでは?
 
 はい、セッション情報はInProcで持っています。
 sessionStateのモードは、デフォルト値のままです。

 もうすでに本番稼動していますので、今からSessionStateServerに
 変更するのは難しい状況です。なお、事象としては、Session自体は
 残っていそうなので問題はないと思っています。


引用返信 編集キー/
■49604 / inTopicNo.8)  Re[5]: timerが1日経つと止まってしまう
□投稿者/ まこと (5回)-(2010/05/11(Tue) 09:32:03)
かたぎり様

 返信ありがとうございます。
 下記インラインコメントにて失礼致します。
 
> そもそも論なのですが、
> METAタグでRefreshさせてクライアント側から
> ページの再表示処理をキックさせて
> DBの最新内容を表示させるのではダメなのですか?
 確かにその方法もありますね。
 プログラム上で1回目の処理(If IsPostBack)と2回目以降の処理を分けているので
 全部1回目の処理が走らないか調査してみます。
引用返信 編集キー/
■49605 / inTopicNo.9)  Re[6]: timerが1日経つと止まってしまう
□投稿者/ まこと (6回)-(2010/05/11(Tue) 09:44:49)
れい様

 返信ありがとうございます。
 下記インラインコメントにて失礼致します。
 
>>METAタグでRefreshさせてクライアント側から
>>ページの再表示処理をキックさせて
>>DBの最新内容を表示させるのではダメなのですか?
>
> 私のところでも、とある物理量のリアルタイムモニタをしていますが、それはrefreshでした。
> Windows Server 2003のIISでやってますが、1か月くらいの連続稼働では止まりません。
> ただし10分程度の更新間隔なので更新回数は1か月で31x24x6 = 4464。
> 6秒更新だと1日で24x60x10 = 14400。
> うーん。動いても当然か。
 
 やはりrefreshを使用しているのですね。
 refreshで問題なく稼動するかテストしたいと思います。
 計算もしていただきありがとうござます。
 
> 6秒間隔で延々とリクエストされ続ける、というのはかなり負荷が高くなりますよね。
> HTTP/TCPの設計思想からいっても、6秒の更新間隔を要求するのはぎりぎりです。
> 転送量にもよりますが、1日ずっとなら、DoSと間違われてもおかしくないくらいかと。
> IISにDoSフィルタが入っててもおかしくないように思いますし、
> #すみませんが、本当に入っているのかは知りません。結構細かいフィルタが一杯はいってることしかわかりません。
> また、今後HTTPの途中に、1日ずっと続くようなリクエストを止めるフィルタが入ってもおかしくありません。

 この関連でIIS6が何か制御しているか調査してみます。
 調査結果はまたこのトピックにご連絡いたします。

> 転送回数も上記の様に1日で14400になります。
> レンダリングエンジンはかなり重く、バグも多いものなので
> 20000回ページを表示したら1回くらい止まってもIE6なら仕方ないような気もしますし…
> #むしろ頑張ってる方かも。
 
 なるほどですね。ブラウザにも問題があるか調査してみます。
 ちなみにブラウザはFireFox3.5です。

> つまり、設計に無理があると思います。
> 本当に6秒更新とASP.Netが必要なのか検証したほうがよいかと。
 秒数を多少伸ばすのは可能なのですが、ASP.netを変更するのは難しいです。
 すでにお客様環境で稼動しているものなので。。。  

> Ajax系の動的更新を使うとか。
> #Ajaxも連続稼働に耐えるかちょっと微妙ですが。
 Ajax系のプログラムも頭の片隅に入れておきます。
 現在、障害対応中でプログラムを作成する時間に限りがございますので。。
 
 ※ご丁寧にはつねさん、かたぎりさんの返信にも答えて頂きありがとうございました。

引用返信 編集キー/
■49606 / inTopicNo.10)  Re[6]: timerが1日経つと止まってしまう
□投稿者/ はつね (1264回)-(2010/05/11(Tue) 09:46:17)
No49598 (れい さん) に返信
> ■No49593 (はつね さん) に返信
>>セッション情報をInProcでもっているのでしょうか?
>>もしそうならばワーカープロセスを無効にするのではなく、SessionStateServerなどに
>>セッション情報を保存するように調整したほうがいいのでは?
>
> 更新するかどうか、その時刻はクライアントがスクリプトとして持っています。
> また、今はセッションが残っているそうなので、その内容が壊れてクライアントスクリプトが壊れているというのも
> ちょっと考えづらい。
>
> なので、セッションは関係ないかと思います。

あれ?ワーカープロセスを無効にしたからセッションがのこっているんですよね?
私が言いたかったことは、ワーカープロセスのリサイクルが発生してもセッションを残すので
あれば、InProcではなくSessionStateServerの方が適切じゃないかということです。


No49589 (まこと さん) に返信
ワーカープロセスのリサイクルが29時間で発生していたそうですが、web.configに書かれている
sessionStateのタイムアウト値ってどれくらいにしているのでしょうか?

引用返信 編集キー/
■49607 / inTopicNo.11)  Re[7]: timerが1日経つと止まってしまう
□投稿者/ まこと (8回)-(2010/05/11(Tue) 10:07:36)
No49606 (はつね さん) に返信
> ■No49589 (まこと さん) に返信
> ワーカープロセスのリサイクルが29時間で発生していたそうですが、web.configに書かれている
> sessionStateのタイムアウト値ってどれくらいにしているのでしょうか?
 sessionStateのタイムアウト値はデフォルトのままなので、20分です。
 Session情報は、6秒おきに行う処理の中で毎回しております。
引用返信 編集キー/
■49608 / inTopicNo.12)  Re[5]: timerが1日経つと止まってしまう
□投稿者/ なちゃ (428回)-(2010/05/11(Tue) 10:14:19)
セッションの話は、今回のタイマの話とは関係ないでしょうが、
まあ別途重要な話ではあります。
何らかの理由でワーカープロセスが再起動してしまえば、
やっぱり同様に困ったことになるはずですから。再起動を完全に防ぐことはまず不可能です。

で、結局のところ問題はブラウザ側の可能性が高い気がしますので、
問題が起こりにくい更新方法を模索するしか無いでしょう。
※ブラウザを使うなら
META使う方が、シンプルな分まだ耐えるかも知れません。


そもそも論を言うなら、出来合いのブラウザで長期間自動更新させるのは無茶です。
何かの拍子にネットワークの調子が悪くなったとか、
たまたまサーバ処理で何らかの事情でエラーが起こったとか、
とにかくたまたま運悪く何かあれば一発で停止です。

専用クライアントでも作るか、ブラウザや通信の状況を監視して
再起動してやる位のことをしないと、まず確実に動かし続けることは無理でしょう。
専用クライアントであっても別途監視なりの仕組みが必要なくらいです。

引用返信 編集キー/
■49610 / inTopicNo.13)  Re[6]: timerが1日経つと止まってしまう
□投稿者/ なちゃ (429回)-(2010/05/11(Tue) 10:19:09)
Ajax系でのタイマー処理なら一度エラーが起こってもリトライさせるつくりにはできますが、
今度はスクリプトの信頼性の方が問題になるでしょう。

引用返信 編集キー/
■49702 / inTopicNo.14)  Re[7]: timerが1日経つと止まってしまう
□投稿者/ まこと (10回)-(2010/05/13(Thu) 15:43:30)
なちゃさん、はつねさん、かたぎりさん、れいさん

 ご連絡が遅くなり申し訳ございません。
 timerが止まる原因が判りましたのでご連絡致します。

 原因は、WebDbサーバーの負荷が高くなった為、
 クライアントからのTimer処理が受け付けられなくなったようです。

 現在、WebサーバとDBサーバを1つのサーバに入れて運用しています。
 あるサーバからは、データの書き込み、クライアントからは
 データの参照を行っています。10画面から6秒周期で1日アクセスされ
 っぱなしだった為、WebDBサーバのPF量(メモリ使用量)がパンパンに
 膨らみ、クライアントの処理を受けれなくなったようです。

 対策としては、
 リフレッシュ周期を伸ばす&アプリケーションのメモリリーク対応を行う
 &夜間に1度ワーカープロセスを起動&バッチで新画面を呼び出す
 
 などを考えております。

 なお、IIS6の機能でアタックのようなプロセスを自動で切断する機能があるか調べてみましたが
 調べた限りでは見つけることが出来ませんでした。念のため情報共有です。
 
 お忙しい所、色々とご協力いただきどうもありがとうございました。
 バーチャルな世界ですが、皆さんの温かい返信をいただき、本当に
 感謝しております。今後も何かございましたら、どうぞよろしくお願い致します。
引用返信 編集キー/
■49703 / inTopicNo.15)  Re[8]: timerが1日経つと止まってしまう
□投稿者/ まこと (11回)-(2010/05/13(Thu) 15:44:51)
すみません、解決済みにチェックを入れておりませんでした。
皆様、どうもありがとうございました。
解決済み
引用返信 編集キー/
■49722 / inTopicNo.16)  Re[8]: timerが1日経つと止まってしまう
□投稿者/ Jitta on the way (636回)-(2010/05/14(Fri) 07:15:24)
No49702 (まこと さん) に返信

>  現在、WebサーバとDBサーバを1つのサーバに入れて運用しています。
>  あるサーバからは、データの書き込み、クライアントからは
>  データの参照を行っています。10画面から6秒周期で1日アクセスされ
>  っぱなしだった為、WebDBサーバのPF量(メモリ使用量)がパンパンに
>  膨らみ、クライアントの処理を受けれなくなったようです。


> ※ワーカープロセスというものがある事を知り、IIS6.0のワーカープロセスは下記手順により無効にしています。
こんなことしてるからだよ…(^-^;)

解決方法は、セッションの持ち方を変える事です。
セッション内容が消えた時点で、もっと調査の手を広げるべきでしたね。
引用返信 編集キー/
■49723 / inTopicNo.17)  Re[9]: timerが1日経つと止まってしまう
□投稿者/ なちゃ (433回)-(2010/05/14(Fri) 08:25:02)
No49722 (Jitta on the way さん) に返信
>>※ワーカープロセスというものがある事を知り、IIS6.0のワーカープロセスは下記手順により無効にしています。
> こんなことしてるからだよ…(^-^;)
>
> 解決方法は、セッションの持ち方を変える事です。
> セッション内容が消えた時点で、もっと調査の手を広げるべきでしたね。

ワーカープロセスの無効化ではなくてそれの時間によるリサイクル(再起動)の無効化ですよ>まことさん

というのはさておき、そうですか?
ワーカープロセスのリサイクルは一種の対症療法であって、問題の原因ではありません。

リサイクルの設定もいつかあって、今回のに引っかかるとしたらむしろメモリ上限系の設定でしょうし。
まあ、全部無効にしてるのなら別ですが。

セッションの持ち方を変えるのも、望ましい方向ではありますが、
これも今回の件に関しては解決方法というより、対症療法のために必要だというだけです。

もちろん、実運用上それで回るようになるならそれは有効な対策ではありますが。

引用返信 編集キー/
■49734 / inTopicNo.18)  Re[8]: timerが1日経つと止まってしまう
□投稿者/ はつね (1268回)-(2010/05/14(Fri) 12:05:25)
No49702 (まこと さん) に返信
>  リフレッシュ周期を伸ばす&アプリケーションのメモリリーク対応を行う
>  &夜間に1度ワーカープロセスを起動&バッチで新画面を呼び出す

InProcじゃなくStateServer使うようにしてワーカープロセスのリフレッシュ復活させて、
夜間に1度ワーカープロセスを再起動するまえに症状がでないようにした方がいい気が
します。
リフレッシュは使っていないところに対して行うので、バッチで新画面を呼び出すみた
いなことも不要ですし、なんだか大変な対応しているように思えてしまいます。

あと、できるかどうか確認していないけど処理負荷が高いってことであれば、タイマー
イベントが発生したらタイマーを止めて処理後にタイマー起動とすることで、6秒間隔
ではなく処理と処理の間が6秒開くことになるので状況は違くなるように思います。

とりあえず、質問者が解決済みとしているので解決済みチェック復活しておきますね。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -