• ベストアンサー

JavaVMの最大占有メモリ

こんにちは 今度、常駐するJavaプロセスでファイルリソースをONメモリにして 処理速度向上の施策を考えているのですが、ファイルリソースが全部 で2GBくらいあります。 2GBから4GB増強しており、すべてメモリ展開しても十分な要領 ではあるので、VM起動オプションで上限を十分な要領3GBくらいに 設定しようと思うのですが、JavaVMで使えるメモリ上限がないか心配 です。 大丈夫でしょうか。

  • wget
  • お礼率48% (69/143)
  • Java
  • 回答数4
  • ありがとう数5

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

  • ベストアンサー
  • ggaogg
  • ベストアンサー率43% (38/88)
回答No.3

先ほど書いたmanの内容の2000Mの表記ですが、あまりあてにならないようです。 WindowsVistaでは1500Mが限界、自宅のDebian(物理メモリは512M)では2600Mまでいけました。 やはり4Gが成功したのは、あくまでも私の経験として参考にしてもらうのがいいと思います。 もしもソフトだけではなくハードによっても左右されるとしたら、ブレードサーバで、めちゃくちゃ性能がよかったから可能だったのかもしれませんし。。 環境によって大きく左右されるようなので、質問者さんの環境で実際に試してしてみるのが一番早いと思います。 答えられることは以上です。。

wget
質問者

お礼

何度も回答いただいて大変助かります。 SunのJDKではバージョン、VMの実装にかなり依存するようですね。 こちらもJRockitのメモリ制限を調べてたところ、 http://edocs.beasys.co.jp/e-docs/jrockit/geninfo/diagnos/memman.html#wp1086927 「通常は、ヒープのページアウトが発生しない限り、大きなヒープによるオーバーヘッドは、ガベージコレクション頻度の増加や割り当て速度によって発生するオーバーヘッドよりも小さくてすみます。このように、ヒープサイズは、利用可能な物理メモリを超えない範囲でできるだけ大きく設定するのがよいでしょう。」 とありました。JRockitでは物理的な制限が占有メモリの制限となるように 解釈できるのですが、どうなんでしょうかね。実際に検証してみました。 4GBのマシンで初期占有メモリ、最大占有メモリを3GBで起動したところ、起動できませんでした。 [WARN ] Failed to create memory pool for code. Could not create the Java virtual machine. ログでは単にメモリが足りなかったからっぽいですね。

その他の回答 (3)

  • spieder
  • ベストアンサー率59% (13/22)
回答No.4

使う環境はLinux?Windows?どちらでしょうか? OSは32bit?64bit? OSが32bitなら2GBや3GB辺りにOS側の制限があるので注意しないと物理的にメモリを積んでいてもアプリ(JAVA)側で利用できませんよ http://www.microsoft.com/japan/whdc/system/platform/server/PAE/PAEmem.mspx http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34803&forum=10&7

wget
質問者

お礼

こんにちは 環境はLinuxで32bitOS(CentOS5)です。このような制限もあるのですね。 大変参考になりました!

  • ggaogg
  • ベストアンサー率43% (38/88)
回答No.2

JDKは、Eclipseの亜種に付属のものを使い、Java1.4のプログラミングを行いました。 JREはSunのものだと思いますが、環境の構築はしていなかったので、定かではないです。 JRokitなるものがあるとは知りませんでした。 SunのJavaのmanを見てみましたが、ちょっと気になる一文を発見しました。 -Xmxn Specifies the maximum size, in bytes, of the memory allocation pool. This value must be a multiple of 1024 greater than 2 MB. Append the let- ter k or K to indicate kilobytes or the letter m or M to indicate megabytes. The default value is 64MB. Examples: -Xmx83886080 -Xmx81920k -Xmx80m On Solaris 7 and Solaris 8 SPARC platforms, the upper limit for this value is approximately 4000m minus overhead amounts. On Solaris 2.6 and x86 platforms, the upper limit is approximately 2000m minus overhead amounts. On Linux plat- forms, the upper limit is approximately 2000m minus overhead amounts. これによると上限が大体2000メガと書いてあるので、ひょっとすると4Gとかは無理かもしれませんね。(あくまでもSunの場合で、JRokitはわかりませんが) 私の経験上4Gは可と書きましたが、自信が無くなってきました。 その時の環境についての担当ではなかったので、ひょっとすると誤りかもしれません。 はっきりとしない答えで申し訳ないです。 JRockitについても、manを見れば一発で分かるのではないでしょうか。

wget
質問者

お礼

JRockitですが、私の経験をお伝えしますと、 WebASP製品をJavaで動かしていて、JDKをSunのJDKからJRockitに移行した ところパフォーマンスが30%向上しました。Tomcatや常駐プログラム、 クライアントサーバ方のサーバサイドプログラムにはかなりの向上が見込 めますよ。(私の経験上ですが。) ちょっとJRockitのマニュアル見てみます。

  • ggaogg
  • ベストアンサー率43% (38/88)
回答No.1

本質的な回答になっていませんが、私の以前のプロジェクトでは、VM引数で4GB指定して(RedHat Linuxにて)動いたという経験がありますので、多分問題ないのではないでしょうか。

wget
質問者

お礼

経験上問題なしなんですね。参考になりました。 ちなみにJDKは何をお使いだったでしょうか。 私はJRockitというサーバサイドに特化したJDKを使っています。

関連するQ&A

  • JAVA VMの2回目以降の起動が早いのはなぜでしょうか。JAVAのプ

    JAVA VMの2回目以降の起動が早いのはなぜでしょうか。JAVAのプロセス自体は起動毎に作成されているので、プロセスが常駐しているということではなさそうですが、メモリのどこかに情報が残っているのでしょうか。 また、JAVAの画面アプリケーション等で、初回の起動が遅く2回目以降は早くなるのは、VMの起動速度だけではなさそうなのですが、ロードしたクラスの情報もどこかに残っているのでしょうか。

  • リソースモニターでの仮想メモリがXmxのサイズ超過

    「リソースモニターのプロセスの仮想メモリ量がJavaのオプションで指定した最大ヒープサイズを超過する」 Javaアプリでリークが発生しているために調査しているのですが、 Windows7ProSP1 の環境でリソースモニターで当該プロセスの状況をチェックしていたところ、 JVMのオプション -Xmx で指定した最大ヒープサイズの3倍程度のサイズがコミットの仮想メモリ量として 表示されました。(指定:1GB、コミット:約3GB) Javaのヒープサイズの上限をはるかに超過するという事象が、 メモリリークの問題に関係するのか、それともリソースモニターではそのような現象は 普通に発生するのかという疑問が課題として発生してしまいました。 調査した範囲ではこのような現象についての情報が見つかりませんでしたので、 ご存知の方がおられましたらご協力をお願いします。

  • Latitude E5500メモリ増設について

    DELLのLatitude E5500(Core2Duo2.53GHz、メモリ2GB、WindowsXPへのダウングレード版)を使っています。メモリをスペック上の上限4GBに増強したいと思って筐体を開けてみましたが、メモリスロットが1つだけ(そこに2Gのメモリが入っています)のようにしか見えません。スペック表の上ではメモリのスロットは2つとなっている筈なのですが・・・。 現在入っているメモリの上に、ちょっと段違いで奥まったところにスロットのような部分があった(メモリ挿入用の切り欠きらしきものが見えた)ので、試しにメモリを挿してしみたのですが上手く入らず、どうやらここはメモリスロットではなかったようです。 Latitude E5500のメモリを4Gに増強する場合はどのようにすれば良いのでしょうか。どなたかご教示頂ければ幸いです。

  • Javaでメモリ不足を引き起こす方法

    Javaを使って、システムのメモリ不足を引き起こす方法を考えています。 (動作検証のためで、悪いことを考えているわけではありません^^;) 下記のプログラムでメモリを大量に消費するかなと思ったのですが、 Linux上のvmstatやtopなどで確認してもそれほど変化がありません。 while (true) { Integer[] ii = new Integer[100]; for (int i = 0; i < 100; i++) { ii[i] = new Integer(i); } } Javaの1プロセスが使えるメモリの上限があるので、メモリを食いつぶすプロセスを 大量に実行すれば良いと考えているのですが、メモリを食いつぶす方法が分かりません。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • メモリ(とタスクマネージャ)について

    こんにちは。 最近ネットゲームをしていて、重くなってきたと感じました。私のPCはメモリが1024MBで、タスクマネージャを開くと400MB位は他の様々なプロセス名が載っていました。「svchost.exe→28,3MB使用」など一体何のプロセスだか分からないプロセス名が40個位あります。PCというのは常にこんなに常駐で動くプロセスが必要なのでしょうか。 あと、この場合、実際にネットゲームしている時にメモリを注げるのは残りの600MB分ということでしょうか。 一つひとつのプロセスが一体どんなもので、それが今自分のPCに必要なものかを調べたい時、そのファイルを開くにはどうしたらよろしいでしょうか?

  • AIXでのプロセス使用メモリの最大値

    1プロセスで使用可能な仮想メモリのサイズの計算方法を教えてください。 ulimitで得られる設定状況は下記の通りです。 time(seconds) unlimited file(blocks) unlimited data(kbytes) 245760 stack(kbytes) 15360 memory(kbytes) unlimited coredump(blocks) unlimited nofiles(descriptors) 2000 サーバーの実メモリは8GBです。

  • dllhostが、メモリCPUを占有し動作遅延

    SONYタイプL VGC-LN92JS(4GB)購入直後から、時々重くなるので調べましたら、dllhost.exeが悪さをしているようです。 dllhostは、4つありタスクマネージャーからみると一瞬4つがみえてほどなく2つになります。一方のdllhostが、常時アイドル状態でもCPU使用率0~2となっており、常駐メモリも暫時増え続けていきます。時間経過とともに100MB超になっていきます。ウィルスはありません。アプリケーションを動作停止にして調べましたが、状態は同じです。Windowsから、dllhostを起動するソフトがあるように思えるので、これを突き止めて動作停止にしたいのですが、どなたか、お知恵をお願いします。今は立ち上げの度にプロセス停止してしのいでいます。

  • XPで実行できるプロセスの最大サイズは?

    32ビットのwindowsXP SP2 を使用しています。メモリサイズはマイコンピュータ上で3.5GBと表示されます。(4GB実装のため。) よく、タスクマネージャーで確認すると、2GBを超えるプロセスを実行していますが、問題が生じます。(どうも、メモリ?容量の問題らしいです。) メモリは1.6GB程度の開きはありますが、しょっちゅう「要求を完了できません」などのエラーが出ます。そこで、データのサイズを減らすとうまく動きます。(使用するソフトはfireworksというソフトです。) ** いったい、XP 32ビットOSには、アプリケーションのメモリサイズの上限があるのか無いのか? その点についておしえていただきたくよろしくお願いします。 ご存知でしたらよろしくお願いいたします。

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

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

  • Windows 2003 Enterprise Edition(32bit)のメモリについて

    お世話になります。 環境:Oracle 10.2.0.4.0     RAC構成(2つのノード)     ASM自動管理 OS:Windows 2003 Server EnterPrise Edition (32bit) データ量:140GB システム:24時間365日稼働       OLTPが中心だが一部DSS系も混在 セッション数:ピーク時に300 メモリ:4GB ※4GT、VLM等は使用しておりません。 SGA:1000MB バッファキャッシュ:432MB 共有プール :336MB ラージプール:104MB JAVAプール:16MB 【問題】 4か月前にシングル環境からRAC環境にリプレースを行ったが接続エラーが発生。 原因はORA-4031、TNS-12531が出力されていることから共有プールの断片化が原因と判断していたがORA-4031発生後に TNS-12531が連続して出力していることからOSリソース不足又はOracleメモリ割り当て不足の可能性もでてきた。 RAC構成にしたことでリソースが増加しておりWindowsのパフォーマンスモニタでOracle関連のプロセスのVirtual Bytesを集計したところ、 両ノードとも2500MB程度だった。(oracle.exeは1300MB) 仮想メモリ2GBの問題は1プロセス2GB制限ということから問題なし。 OS全体では物理的に4GBあるがカーネルメモリ2GB、ユーザメモリ2GBの制限がある?と聞いたことがある。 ただ上記計測はVirtual Bytesの為、OS全体のメモリ使用量を見る場合はPrivate Bytesを見るべき?(oracle.exeのPrivate Bytesは1150MB) また、ベンダー様から現在の空き容量は1.7GBあるということを聞いたがユーザーが使用できるメモリ使用量が空いているのかわからない。 以上のような背景から以下、質問になります。 質問(1) 上記WindowsでOS全体のリソース不足の判断基準とするべきものはPrivate Bytesになるのでしょうか? 質問(2) 上記Windowsだとユーザが使用できる物理的なメモリは2GBになるのでしょうか。 または4GBフルで使用できるのでしょうか。 (oracle.exe以外にもrac関連のプロセスが多いのでどこまで使用できるのかが不安) 質問(3) リソースという観点から余裕があるなしの判断にできることがあればご教授頂きたいです。 宜しくお願い致します。

専門家に質問してみよう