• ベストアンサー

JavaVMの最大占有メモリ

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

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

  • ベストアンサー
  • 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