現在14GBのヒープで実行されているJavaサービスがあります。-XX:+ UseLargePagesオプションを試して、これがシステムのパフォーマンスにどのように影響するかを確認したいと思います。適切な共有メモリとページ値を使用して、Oracleの説明に従ってOSを構成しました(これらはオンラインツールを使用して計算することもできます)。
OSを構成すると、予想される量のメモリが巨大なページとして割り当てられていることがわかります。ただし、-XX:+UseLargePages
オプションセットを使用してVMを起動すると、常に次のいずれかのエラーが発生します。
-Xms
/-Xmx
が巨大なページ割り当てとほぼ等しい場合:
Failed to reserve shared memory (errno = 28). // 'No space left on device'
-Xms
/-Xmx
が巨大なページ割り当てより少ない場合:
Failed to reserve shared memory (errno = 12). // 'Out of memory'
ある程度の余裕を持たせてみました。32GBのシステムで、24GBの共有メモリと巨大なページを20GBのヒープで構成されたJVMで使用するために割り当てましたが、現在は14GBしか使用されていません。また、JVMを実行しているユーザーがと一致するグループ権限を持っていることを確認しました/proc/sys/vm/hugetlb_shm_group
。
誰かが私がどこで間違っているのか、そして次に何を試すことができるのかについてのいくつかの指針を私に与えることができますか?
割り当て/使用率:
-Xms
/-Xmx
-20GB- 使用されるヒープ-14GB
/proc/sys/kernel/shmmax
-25769803776(24GB)/proc/sys/vm/nr_hugepages
-12288
環境:
- システムメモリ-32GB
- システムページサイズ-2048KB
- debian 2.6.26-2-amd64
- Sun JVM 1.6.0_20-b02
解決
解決策につながる答えを提供してくれた@jfgagneに感謝します。 /proc/sys/kernel/shmall
設定(4KBページとして指定)に加えて、Thomasのブログで説明されているようにエントリを追加する必要がありまし/etc/security/limits.conf
た。ただし、アプリケーションの使用を開始すると、rootユーザーの設定も複製する必要がありました(制限はKBで指定されていることに注意してください)。jsvc
root soft memlock 25165824
root hard memlock 25165824
pellegrino soft memlock 25165824
pellegrino hard memlock 25165824
-version
また、次の引数を使用してJVMを起動することにより、設定をすばやくテストできることにも言及する価値があります。
java -XX:+UseLargePages -Xmx20g -version