2009-06-29 7 views
0

この質問はJava Refuses To Start - Could Not Resrve Enough Space for Object Heapに関連しており、把握するのに十分なはずです。しかしながら;私の検索では何も役に立たなかった。SuSE Linuxの最大Javaヒープスペースとは何ですか?

本質的には、同じハードウェアを持つ異なるマシンに2つの32ビットOS(RedHat & SuSE)があります。両方とも、同じコマンドラインを実行する両方の同じJVMを使用します。 RedHatは正常に動作しますが、SuSEは十分なメモリがないことを報告します。

これは、使用しているSuSEのバージョンの制限であるかどうか、またはそれが他のものであるかどうかを知るだけです。

'猫の/ proc /バージョンは' 私達を与える:

Linux version 2.6.5-7.244-bigsmp ([email protected]) (gcc version 3.3.3 (SuSE Linux)) #1 SMP Mon Dec 12 18:32:25 UTC 2005 

'は、una​​me -a' 私たちのマシンの両方のタイプで次のようになります:

UTC 2005 i686 i686 i386 GNU/Linux 

答えて

2

JVMのメモリ制限が関係しています最大空き時間は連続空きメモリの量ではなく、利用可能なブロックです。制限は約1.4 GBから2.0 GBを少し上回っています。オペレーティングシステムがメモリにさまざまなものを置く場所によって異なります。私はRedhatやSuseがメモリにデータをロードする場所について詳しくは分かりませんが、suseはRAMの中のあるアドレスにライブラリをマッピングしている可能性があります。

Javaでの実際のメモリ使用量は、以上であり、Xmxに指定するものは以上であることに注意してください。その他のメモリ設定は、ヒープのサイズ(permgenなど)にも影響します。したがって、SuseのパーマネントスペースはRedhatよりもデフォルトのデフォルトを持つこともできます。

また、アプリケーションのメモリ割り当てプロファイルによっては、ヒープサイズが小さくなり、ガベージコレクションオプションが異なる可能性があります。ここにいくつかの詳細(http://java.sun.com/performance/reference/whitepapers/tuning.html)と他の場所があります。たとえば、たくさんの小さな一時ブロックを割り当てる場合は、長持ちしたオブジェクトがたくさんある場合とは異なるGC設定が必要になります。

リンクされた質問に関しては、単にレッドハットを使用してみませんか?それは単純な解決策かもしれませんが、私は、JavaチューニングとOSメモリ管理の秘密の世界を深く掘り下げるよりも、あなたの問題をより速く解決することを保証します:P

+0

説明のためにありがとう。アロケーションビットは意味があり、それを説明するかもしれません。それまで私がレッドハットに移行していたのですが、私たちの会社はSuSEに切り替えました。そのため、私たちの新しいマシンはすべてSuSEです:(最大ヒープサイズを落とすことについては、しかし、現時点では可能ではありませんが、私たちのメモリ使用量を減らす計画があります。 – Randyaa

0

まず、あなたは32ビットOSあなたはこの多くのアドレス空間の圧力を持っています。 64ビットLinux上の64ビットJVMに移行する。あなたは最初から疑われている必要があります。この問題は、64ビットシステムのより大きなアドレス空間を離れて行くだろう診断しようとしてすでにどのくらいの時間を無駄にしていますか?

第二に、うまく、すべてのLinuxベンダーのRed Hatは、スタッフのほとんどのカーネルエンジニアを持っており、彼らのRHEL製品のカーネルのためにいくつかの深刻なひねりを作ることが知られています。これらには、あなたのような大きなワークロード用のパッチが含まれていることがよくあります(32ビットシステムでは大きな負荷ですが、64ビットでは特別なものはありません)。だからこそ、RHELには他の顧客があなたと同じクレイジーなことをしており、その顧客をサポートするための仕事から利益を得ている理由があります。

最後に、32ビットSuSEでこれを実行する方法を見つけようとしていると思うので、Linuxは32ビットx86上でさまざまなアドレス空間のトレードオフを提供すると指摘しますあなたのSuSEシステムでは、異なるトレードオフが選択されている可能性があります(しかし、それは確かではありません)。実行しているカーネルの設定を(通常は/ boot/config ...で)行うことができれば、HIGHMEMのような設定を比較することができます。

従来のオプションは数年前に2:2に分割されました。つまり、ユーザー空間は2GiBのアドレス空間に制限されています。プログラムの簡単な解決策ですが、効率は良いですが、このシナリオでは、最近では、OSカーネル自体を犠牲にしてユーザー空間のアドレス空間を拡張する3:1(Windows/3GBスイッチに似ています)という傾向がありました。潜在的にそれ自身の問題を引き起こすより少ないスペース。これはうまくいくかもしれませんが、それは非常に窮屈なので、あなたの仕事でうまくいかないと私は驚かないでしょう。最後に、より新しいLinuxカーネルは、4GiB 32ビットのユーザースペースを得るオプションも提供します。これは、ユーザースペースとカーネルアドレスが共存できないため、パフォーマンスを大幅に向上させます。

これを試すには、新しいカーネルが必要です。 SuSEで提供されているものをインストールすることもできます(たとえば、「PAE」オプションなど)。自分でコンパイルする必要がある場合は、サポート契約が無効になっている可能性があります。

しかし、実際には、オプション1を使用して64ビットJVMに切り替えるだけで足を伸ばす必要があります。

+0

できれば残念ですが、マシンや契約を制御したり、Linuxのバージョンを切り替えることはできません。 – Randyaa

関連する問題