人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Webアプリケーションで、非常に付加がかかり、メモリが
無くなった場合の挙動についての質問です。(JavaのStrutsで構築)

非常に大きなサイズのCSVファイルを読み込み、DBへの挿入、検証など、約2時間ぐらい
(比例計算により算出された予想時間)の待ち時間が生じる処理をユーザに行わせるのですが
(ユーザは例えば自社社員などのような、限られたウェブ)
万が一、Javaがメモリを食いつぶした場合、サーバなどはどうなるのでしょうか。
実行した本人のレスポンスが返ってきたページが、500エラー等になるのは仕方ないとしても、
同時間にログインしていた他のユーザがセッションが切れるとか、サーバの再起動が必要に
なったりするのでしょうか。

それはウェブサーバの種類にも依存しますか。(Tomcat等)
また、どのくらいメモリが使用されているかを確かめるUNIXのコマンドなど、リアルタイムに
確認する方法はありませんか。

●質問者: kyoko55
●カテゴリ:インターネット ウェブ制作
✍キーワード:CSV dB Java Struts Tomcat
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● komamitsu
●26ポイント

> どのくらいメモリが使用されているかを確かめるUNIXのコマンドなど、リアルタイムに

確認する方法

ここだけに反応します。

リアルタイムにプロセス毎のメモリ使用量が見れるtopコマンドはどうでしょう?

http://www.linux.or.jp/JM/html/procps/man1/top.1.html

スワップアウトがばんばん発生しそうな状況であればRES(物理メモリ)の他にVIRT(仮想メモリ)にも注目しておけば良いかと思います。

◎質問者からの返答

ありがとうございます。topコマンド試してみます。


2 ● shimesaba256
●44ポイント ベストアンサー

Javaがメモリを食いつぶした場合ですが、通常はOutOfMemoryとなってエラーが返ると思われます。

メモリがちゃんと解放されるようになっていればその後の動作には支障がないとは思いますが、同時にアクセスしていたユーザは同じエラーに見舞われると予想されます。その後レスポンスがない場合などは、メモリが解放されていないかもしれないのでサーバを再起動する必要があるでしょう。

Java VMのメモリ使用量を知りたいのなら、Runtime.getRuntime().freeMemory()などを使うのいい気がします。

long free = Runtime.getRuntime().freeMemory() / 1024;

long total = Runtime.getRuntime().totalMemory() / 1024;

long max = Runtime.getRuntime().maxMemory() / 1024;

long used = total - free;

double ratio = (used * 100 / (double)total);

String info = "Java メモリ情報 : 合計=" + total + "
";

info += "使用量=" + used + " (" + ratio + "%)
";

info += "使用可能最大="+max;

out.println(info);

基本、こういった作業は運用時間中は避けたほうが無難だとは思いますが・・

◎質問者からの返答

ありがとうございます。

Runtime.getRuntime().freeMemory()、試したいと思います。

> メモリがちゃんと解放されるようになっていれば

これはプログラムの作り方次第で解放されたり、されなかったりするんでしょうかね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ