Webアプリのメモリリーク

このQ&Aのポイント
  • Webアプリをjavaで開発し、Tomcat7を使用しています。起動時は80Mほどのメモリ使用量ですが、使用中に150Mほどに上昇し、ログアウトしても変化しません。
  • ログアウト時にはセッションを無効化していますが、まだオブジェクトへの参照が残っている可能性があります。ガーベッジコレクションも効果がなさそうです。
  • この状況はメモリリークしている可能性があります。問題の解決方法を見つけるためには、メモリ使用量の変化を追跡し、オブジェクトの参照を確認する必要があります。
回答を見る
  • ベストアンサー

Webアプリのメモリリーク

Webアプリをjavaで開発しておりTomcat7を使用しています。 Windowsタスクマネージャーで tomcat7.exe のプロセスが使用するメモリを監視していたところ tomcat起動時には80Mほどの使用量なのですがWebアプリを使っているうちに150Mほどに 上昇します。 その後、使用し続けてもほとんど上昇しないのですがログアウトしてもメモリ使用量が150Mほど のままで変化がありません。 これはメモリリークしているのでしょうか。ログアウト時にはセッションはinvalidate()メソッドにて 無効化しています。 ログアウトすると初期の80Mほどにメモリ使用量が変化すると思っていたのですが まだ何かオブジェクトへの参照が残っているということでしょうか。30分ほど放っておけば ガーベッジコレクションされるのかと思ったのですがメモリ使用量が変わらなかったので ガーベッジコレクションされてるわけでもなさそうです

  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1622/5658)
回答No.1

>その後、使用し続けてもほとんど上昇しないのですがログアウトしてもメモリ使用量が150Mほどのままで変化がありません。 それで正常な動作です。 javavmの実装にもよるのかもしれませんが、一度OSから確保したメモリはjavavm自身が終了するまでOSに返すことはしません。 >30分ほど放っておけばガーベッジコレクションされるのかと思ったのですがメモリ使用量が変わらなかったのでガーベッジコレクションされてるわけでもなさそうです なのでGCが行われたところでjavavmのメモリ使用量が減るわけではありません。 GCの様子はvisualvmなどで見ることができます。

unko347
質問者

お礼

どうもありがとうございました。

unko347
質問者

補足

ご回答ありがとうございます。 早速visualvmを試してみたところTomcatをモニタリング できました。 起動したところTomcatに接続するのに認証ダイアログみたいなの が出たのですがID/PASSにroot/rootを設定したらTomcat に接続できました。このID/PASSはTomcatのどこで設定して いるのでしょうか。

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1622/5658)
回答No.2

>このID/PASSはTomcatのどこで設定しているのでしょうか。 申し訳ありませんがtomcat固有の事はわかりません。 この辺を調べてみてください。 http://tomcat.apache.org/tomcat-7.0-doc/monitoring.html

unko347
質問者

補足

ご回答ありがとうございます。 調べてみたいと思います。

関連するQ&A

  • Tomcatのメモリ使用量

    Tomcatが使用しているメモリ使用量を見たいと思っています。 CentOSでtopコマンドを使用してメモリの使用量を見た場合と JDKに付属している Visual VM を使用してtomcatのメモリ(ヒープ)のメモリ使用量 を見た場合、topコマンドで見た方が使用量が大きいのですがどちらで見るのが 正しいのでしょうか。また、Visual VMでみると短時間でガーベッジコレクション を繰り返しており、メモリ使用量の増減を繰り返しているわかるのですが topコマンドで数値を見る限りメモリの増減を繰り返しているように見えないです。 topコマンドとVisual VMで見るメモリは違うのでしょうか。

    • ベストアンサー
    • Java
  • メモリリーク

    メモリリークに関する質問です。 現在稼動しているサーバーについてなのですが、メモリの使用量が実際に搭載しているメモリ量を超えてスワップが発生してしまっています。一日当り数MBのメモリが消費されてしまっているようなのですが、タスクマネージャー上ではそんなに増えているアプリケーションはありません。 プリンタドライバが悪さをしているとの話もあるのですが、調査の仕方がわからず困っています。 まずはこれがメモリリークなのかどうかがよくわからないのですが、調査方法等ご存知の方、知恵を貸してください。よろしくお願いいたします。 【ちなみに環境は】 ・Windows2000Server ・ORACLE9.0.1 ・プリンタ用のパッケージ ・VC++及びVBにて開発 【こんなシステムです】 ・一日に1400枚程度の紙を印字 ・RS232Cを使用して他のコンピュータと通信を  一日に1400回程度行っている  (1回あたり256バイト)

  • VM環境のみメモリリーク発生

    Oracle11gをLocal上とVM1、VM2に構築(内容は同じ)(Windows7) 同じアプリをLocal(LocalのOracle)、VM1(VM1のOracle)、VM2(VM2のOracle)で実行 VM1上のみアプリ(MFC)がメモリリーク発生 LocalのアプリをVM1のOracleに接続→アプリのメモリリーク発生 VM2のアプリをVM1のOracleに接続→アプリのメモリリーク発生 アプリ(MFC)自体はセレクト文の連続実行程度でVM1のみリークが発生します。 Windowsのパッチ適応は同じ アラートログ、リスナーログにエラー表示等はありません VM1のOracleの使用メモリは400M程度です 再起動をしてみたり、表領域を大きくしてみましたが発生します。 他にどんな所を調べみたらいいかアドバイスをお願いします。

  • Windowsでメモリリークの特定

    Windows8を使っていてメモリを8GB積んでいます。 3日ほど起動しっぱなしでいるとメモリの空きが少なくなっています といった警告ウインドウが出てきて、、メモリ使用量が6GBほどになっております。 恐らく何かのプロセスがメモリリークしてると思うのですが、 [タスクマネージャ]→[プロセス]タブを開き、メモリ列を確認しても メモリを多量に使っているプロセスは無く、表示されている全プロセスのメモリを合計しても、 とうてい6GBには達しません。 しかし[パフォーマンス]タブをみると8GB中の6GB使用中と表示されています。 このリークしているであろう見えないプロセスを特定するにはどうしたらよいでしょうか? 知っている方いましたら教えて下さい。 お願いします。

  • インターネットエクスプローラのメモリリーク?

    Win7x32、IE10(10.09200.16736)です。 最近やたらメモリが食われていると思って調べていたらどうもIEのようです。起動直後のメモリ使用量は1.4Gなのが、ひとしきりIEを使っているうちに2.8Gまで増えて、IEを終わらせても2.4Gまでしか下がりません。この1Gは何なんでしょうか? 正常なキャッシュなのか、それともメモリリークでしょうか?

  • Linux上でのTomcatのServletプロセスについて。

    ご質問があります。 TomcatのServletプロセスについて悩んでいます。 Miracle Linuxをサーバとして、Apache-Tomcatを連携させたWebアプリの構築をしてます。 ここでまず一つ質問なのですが、Tomcatを起動させた時点でjavaのプロセスが24個も上がるのですが、これは普通なことなのでしょうか?ちなみに、メモリ消費量は約800Mです。 また次に、Tomcat内のServletに対してPostする度にプロセス数が増加し、メモリ消費量も1プロセスにつき300Kも消費してしまいます。そのため、どんどんリソースを消費し、メモリリークを起こしてしまうのですが、なぜかガベージコレクタが作動せず、延々とプロセスが溜まったままの状態になってしまいます。 通常は、ServletにアクセスしたらTomcatが常駐させてるプロセスを使用すると思うのですが、どこがおかしいのか全く分かりません。 どなたか、小さな事でもいいので助言をください。 よろしくお願いします。

  • セッション無効できない。Servlet/JSP

    失礼します。 JavaでServlet/JSPでWebアプリを作っているのですが、 ログアウト処理(セッションの無効化)で困っています。 sessionを操作するSessionOperatorクラスでログアウト処理を実装しています。 SessionOperator sp = new SessionOperator(request,response); sp.logout(); /* ログアウトメソッド */ public void(){ session.invalidate(); } このようにセッションを無効化にしようとしているのですが、その後アカウントページのURLを直接入力でアクセスするとログインしている状態になってしまいます。 ログアウト後、直接入力でアクセスするとエラー画面を表示させたいです。 セッションはちゃんと無効化するにはどうすれば良いですか? セッションの無効化をSessionOperatorクラスで実行すると無効化できないんでしょうか。 どなたか教えてください。

    • ベストアンサー
    • Java
  • セッションIDの削除について

    session_set_cookie_params(1ヶ月); session_start(); を行った場合、webサーバーの/tmp内の 『sess_*****・・』 ファイルは、(ガーベッジ・コレクションを行わない場合)1ヶ月の有効期限が切れると、自動削除されるんでしょうか。

    • 締切済み
    • PHP
  • webアプリを作成する為に勉強すべき事

    Java超初心者です。 現在、Eclipseを使用して初歩的なJavaの学習をしております。 学習の一環でJavaを使用したwebアプリを作成しようと考えています。 目標は掲示板のようなログイン、ログアウト、入力、保存、表示、削除、ができるwebアプリ を作ろうと考えています。 知識としてなにが必要なのか、Tomcat、JSP、Javaサーブレット、 など調べたり学習したりしていたのですが、環境設定の仕方が理解できなかったり して途中で行き詰ってしまいました。なにから手をつけるべきなのかわかりません。 次のステップとして何をどのように勉強するべきか教えて頂けないでしょうか。 初心者にもわかりやすいサイトなどもあれば教えて頂きたいです。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • NT Server4.0のメモリリークについて

    こんにちは。今会社でNT Server4.0を使って特定の顧客との間でWEB受注業務を行っています。最近頻繁にクライアントから「仮想メモリが足りない」とメッセージが出て動かない」「アクセスやページの移動に極端に時間がかかるので何とかして欲しい」との問い合わせがあります。 のの状況下でタスクマネージャーを見てみるとパフォーマンスのメモリの使用履歴のグラフが8割位のところを指しています。 これはメモリリークなのでしょうか? また再起動以外にメモリを解放する方法はないのでしょうか。シェアウェアがあると聞いた事もあるのですがご存じの方教えてください。 ちなみに実装メモリ、仮想メモリ共に256MBです。