- ベストアンサー
JavaVMの最大占有メモリ
こんにちは 今度、常駐するJavaプロセスでファイルリソースをONメモリにして 処理速度向上の施策を考えているのですが、ファイルリソースが全部 で2GBくらいあります。 2GBから4GB増強しており、すべてメモリ展開しても十分な要領 ではあるので、VM起動オプションで上限を十分な要領3GBくらいに 設定しようと思うのですが、JavaVMで使えるメモリ上限がないか心配 です。 大丈夫でしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
先ほど書いたmanの内容の2000Mの表記ですが、あまりあてにならないようです。 WindowsVistaでは1500Mが限界、自宅のDebian(物理メモリは512M)では2600Mまでいけました。 やはり4Gが成功したのは、あくまでも私の経験として参考にしてもらうのがいいと思います。 もしもソフトだけではなくハードによっても左右されるとしたら、ブレードサーバで、めちゃくちゃ性能がよかったから可能だったのかもしれませんし。。 環境によって大きく左右されるようなので、質問者さんの環境で実際に試してしてみるのが一番早いと思います。 答えられることは以上です。。
その他の回答 (3)
- spieder
- ベストアンサー率59% (13/22)
使う環境は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
お礼
こんにちは 環境はLinuxで32bitOS(CentOS5)です。このような制限もあるのですね。 大変参考になりました!
- ggaogg
- ベストアンサー率43% (38/88)
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を見れば一発で分かるのではないでしょうか。
お礼
JRockitですが、私の経験をお伝えしますと、 WebASP製品をJavaで動かしていて、JDKをSunのJDKからJRockitに移行した ところパフォーマンスが30%向上しました。Tomcatや常駐プログラム、 クライアントサーバ方のサーバサイドプログラムにはかなりの向上が見込 めますよ。(私の経験上ですが。) ちょっとJRockitのマニュアル見てみます。
- ggaogg
- ベストアンサー率43% (38/88)
本質的な回答になっていませんが、私の以前のプロジェクトでは、VM引数で4GB指定して(RedHat Linuxにて)動いたという経験がありますので、多分問題ないのではないでしょうか。
お礼
経験上問題なしなんですね。参考になりました。 ちなみにJDKは何をお使いだったでしょうか。 私はJRockitというサーバサイドに特化したJDKを使っています。
お礼
何度も回答いただいて大変助かります。 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. ログでは単にメモリが足りなかったからっぽいですね。