- PR -

JSP/Servletのメモリについて

1
投稿者投稿内容
ヴォイコフ
会議室デビュー日: 2005/11/09
投稿数: 4
投稿日時: 2005-11-09 21:41
はじめまして。JAVAでWebアプリを構築している初心者です。

環境----------------------
OS: RedhatLinux AS2.1
JDK: Java2SDK1.4.2(IBM)
Apache: 2.0.55
Tomcat: 4.1.31
--------------------------

"Hello World"を表示させるJSPを作成し、そのJSPを置いたURLにアクセスし、
そのページを何度も更新し続け、APサーバのメモリ使用状況をtopコマンドで見たら
JAVAのプロセスの"SIZE"がどんどん増え続けます。

topコマンドの"SIZE"を調べると「テキスト、データ、スタック、uarea領域、map領域、
共有メモリ領域、I/Oマップ領域、他のプロセスと共有される仮想メモリ領域を含む
プロセスのサイズの合計」とありますが、上記の現象はメモリリークなのでしょうか?
それとも、正常な現象なのでしょうか?

山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-11-10 00:35
必要に応じてメモリを確保していくのは問題ありません。
無尽蔵に増えていくのは問題ありますが恐らく一定以上には増えないのではないでしょうか。
以下のドキュメントが参考になるかと。
・BEA トラブルシューティング ガイド > サポート診断パターン > メモリ不足とメモリ リークに関する問題の調査
http://www.beasys.co.jp/cs/support_news/product_troubleshooting/Investigating_Out_of_Memory_Memory_Leak_Pattern.html
いっきゅう
大ベテラン
会議室デビュー日: 2004/04/04
投稿数: 153
お住まい・勤務地: 兵庫
投稿日時: 2005-11-10 11:16
> "Hello World"を表示させるJSPを作成し、そのJSPを置いたURLにアクセスし、
> そのページを何度も更新し続け、、

とありますがその際アクセス毎にSessionIDは異なっているいるでしょうか?
異なっているならばそのJSPのセッションを無効にしたらどうなるでしょうか?
ヴォイコフ
会議室デビュー日: 2005/11/10
投稿数: 9
投稿日時: 2005-11-10 12:44
お返事有難うございます。

>インギさん
 教えていただいたサイトを参考にさせて頂き、GCのログを見ながら
 リーク箇所を突き止めようと思います。

 プロセスの"SIZE"が一定以上増えないとは、通常は一定の値になると
 解放されて戻るのでしょうか?

 USEDのメモリは解放されて元の値近くまで戻るようです。

>いっきゅうさん
 SessionIDとは"PID"のことでしょうか?
topコマンドではjavaのプロセスがいくつも立ち上がっており、
 どのプロセスの"SIZE"も上昇し続けます。

(勉強不足なもので、このような質問で申し訳ありません。。^^;)

KOX
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 142
投稿日時: 2005-11-10 12:54
> "Hello World"を表示させるJSPを作成し、そのJSPを置いたURLにアクセスし、
> そのページを何度も更新し続け、、
もしかして、何度も更新し続けること自体が意図しない動作ですか?
更新させるプログラムには問題ないですか?
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-11-10 13:51
Java におけるリークってのはヒープ領域内に配置されているオブジェクトが解放されないことを意味します。
プロセスレベルで増え続けるとすればそれは JVM の問題です。
まずは -Xmx -Xms を同じ値に指定してヒープ領域のサイズを固定しましょう。
そうするとオブジェクト生成により malloc することはなくなりますのでプロセスサイズはだいぶ安定するはずです。
もちろんネイティブコードを生成したタイミングなどではヒープ領域外が使われるので若干プロセスサイズは増えますが。
ヴォイコフ
会議室デビュー日: 2005/11/09
投稿数: 4
投稿日時: 2005-11-10 23:25
>KOXさん
 意図的に更新させています。(すいません。紛らわしい書き方でした。。^^;)

>インギさん
 おっしゃる通り、JVM起動オプションにて-Xmx -Xmsを同じ値にして実行
 しましたところ安定しました。
 これまでここまでメモリを気にすることはなかったので、勉強になりました。
 有難うございます。

[ メッセージ編集済み 編集者: ヴォイコフ 編集日時 2005-11-10 23:26 ]

[ メッセージ編集済み 編集者: ヴォイコフ 編集日時 2005-11-10 23:27 ]
1

スキルアップ/キャリアアップ(JOB@IT)