質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

26262閲覧

WEBアプリでIISのプロセスからメモリを解放するには

tarinko

総合スコア14

IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

1クリップ

投稿2016/08/24 14:47


アプリケーション:asp.net
言語:vb.net

上記環境でWEBアプリを開発しています。
画面遷移などでsessionにデータを溜める作りにしています。
どのぐらいアプリケーションサーバが耐えられるか
試してみたくて、テスト環境で大量データを
段階的にサイズを増やしてセッションに格納しました。

アプリケーションサーバでテストする前に
自分の端末でvisualStudioの機能を使い
セッションがちゃんと増えるか
増えたセッションがちゃんと消えるかを稼働確認しました。

例)ループを100回行ってセッション変数名に
session("XXXX"+カウンタ変数)」とつけ若干大きいデータを格納。
ループ後デバッグで中に入っていることを確認。
廃棄用のボタンを用意して、それを押すと
同じ様にループして、1個ずつsession("XXXX"+カウンタ変数).remove
デバッグで何も取れない事を確認。

格納と廃棄が確認出来たので、
アプリケーションサーバにリリースして実行しました。
すると、メモリがモリモリ増えていき
わーすごいなぁーと、のほほんと見ていたのですが、
いざ廃棄用のボタンを押してもメモリが減りませんでした。

とりあえずアプリケーションプールをリサイクルして
元に戻したので問題は無いのですが・・・。

sessionの破棄についてネットで検索したり
参考書を読むとremoveやremoveallなどやりなさいと書いてありますが
実は意味が無いのでしょうか?
なんのためのremoveなんですか?
それともiisが何か影響しているのでしょうか?
iisの設定はほぼデフォルトでセッションの時間を
少し長くしたぐらいです。inprocにしています。

理由がわかる方がいらっしゃいましたら
教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

.NET のメモリ開放について調べたことがあるので、回答させて頂きます。

.NET はメモリ管理が自動化されており、オブジェクトへの参照がなくなる事で
メモリが解放されます。

(Session の Remove により格納したデータへの参照がなくなります)

しかし、空きメモリとして再割り当て可能になるには、ガーベージコレクションが
実行されるのを待たなければなりません。

ベージ コレクションの条件

通常、ガーベージコレクションの手動実行は不要ですが、テスト的にメモリ開放を
リアルタイムで確かめたい場合は、手動実行してみると良いと思います。

投稿2016/09/03 13:57

Tipo

総合スコア239

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tarinko

2016/09/08 10:25

回答ありがとうございます。 ガーベージコレクションを手動実行で開放確認出来ました! 結構メモリ食ってたから条件に該当するのかと思ったのですが 見てたメモリの箇所が悪かったんでしょうかね。
guest

0

具体的にどんな処理でセッションを破棄しようとしたのか不明なので、具体的なことは何も書けませんが…

テスト環境と異なり、サーバ上では処理が非常に速くて、セッションの破棄が間に合わなかっただけでは?

visualStudioの機能を使い

とのことですが、VisuialStudio等のIDE(=統合開発環境)で デバッグ する場合、デバッガーがアプリの動作に随時割り込みを掛けることでアプリの状態を(任意の時点で)把握できるようになっています。

ですから、単純なループ処理でも、明示的にブレークポイントを設定しないと処理自体は停止しませんが、常に 割り込み が掛けられている状態であり、セッション破棄などの 別の処理 が割り込む余地が生まれやすいです。

一方、サーバ上でデバッガーの管理下にないアプリがループ処理を実施する場合、途中に 適切な wait を挟まないと一気に処理が進んでしまい、別の処理が割り込む余地のない場合も有ります。

メモリがモリモリ増えていき

とのことですが、メモリ使用量の表示が実際の状況に追いついていない(実際の使用量の増加はもっと速い)という場合もあり得ます。言い換えると、メモリ使用量の増加を目で確認した時点では、ループ処理が殆ど終わってしまっている可能性もあり得ます。

投稿2016/08/24 19:41

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tarinko

2016/09/08 10:22

回答ありがとうございます。 試そうと思ってそのまま忘れていた為返事が遅れました。 waitやループではなく一括等で対応してみましたが 変わりありませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問