無くなった場合の挙動についての質問です。(JavaのStrutsで構築)
非常に大きなサイズのCSVファイルを読み込み、DBへの挿入、検証など、約2時間ぐらい
(比例計算により算出された予想時間)の待ち時間が生じる処理をユーザに行わせるのですが
(ユーザは例えば自社社員などのような、限られたウェブ)
万が一、Javaがメモリを食いつぶした場合、サーバなどはどうなるのでしょうか。
実行した本人のレスポンスが返ってきたページが、500エラー等になるのは仕方ないとしても、
同時間にログインしていた他のユーザがセッションが切れるとか、サーバの再起動が必要に
なったりするのでしょうか。
それはウェブサーバの種類にも依存しますか。(Tomcat等)
また、どのくらいメモリが使用されているかを確かめるUNIXのコマンドなど、リアルタイムに
確認する方法はありませんか。
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);
基本、こういった作業は運用時間中は避けたほうが無難だとは思いますが・・
> どのくらいメモリが使用されているかを確かめるUNIXのコマンドなど、リアルタイムに
確認する方法
ここだけに反応します。
リアルタイムにプロセス毎のメモリ使用量が見れるtopコマンドはどうでしょう?
http://www.linux.or.jp/JM/html/procps/man1/top.1.html
スワップアウトがばんばん発生しそうな状況であればRES(物理メモリ)の他にVIRT(仮想メモリ)にも注目しておけば良いかと思います。
ありがとうございます。topコマンド試してみます。
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()、試したいと思います。
> メモリがちゃんと解放されるようになっていれば
これはプログラムの作り方次第で解放されたり、されなかったりするんでしょうかね。
ありがとうございます。
Runtime.getRuntime().freeMemory()、試したいと思います。
> メモリがちゃんと解放されるようになっていれば
これはプログラムの作り方次第で解放されたり、されなかったりするんでしょうかね。