9

現在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
4

1 に答える 1

7

Javaで巨大なページを使用する場合、巨大なページを使用するヒープだけでなく、PermGenもあります。スペースを割り当てることを忘れないでください。Xmxこれが、巨大なページの量に近づくと、異なるerrnoメッセージが表示される理由のようです。

shmallあなたが言及しなかった設定が必要なカーネルパラメータもあります、多分それはあなたをブロックしているものです。あなたの場合、それを6291456に設定する必要があります。

最後に言うと、巨大なページを使用する場合、Xmsパラメータは使用されなくなります。Javaは、巨大なページXmxを使用してすべてを共有メモリに予約します。

于 2012-06-28T09:22:12.890 に答える