
私はRed Hat Enterprise Linux Serverバージョン5.9でJavaサーバーを実行しています。最近私はHugePagesを使い始めました。なぜなら、私が使いたかったいくつかの利点があるからです。システムは正しく設定されており(多くのウェブサイトやブログの場合と同様に)、大きなページに対して40G RAMが設定されています。
HugePages_Total: 20480
巨大ページ_無料:20480
HugePages_Rsvd: 0
大きいページサイズ: 2048kB
サーバーの合計メモリー:128G。 hugePagesを設定した後、システムが再起動し、ヒープサイズが29GのhugePagesでサーバープロセスが開始されました。すべてが順調に進んでいます。最近、jvmパラメータをいくつか変更し、ヒープサイズを30Gに増やしました。 jvmプロセスが再起動されたときに巨大なページを使用しませんでした。ログにエラーが表示されます。
Java HotSpot(TM)サーバーVM警告:共有メモリーを予約できません(errno = 22)。
Javaパラメータの他の変更がこの問題を引き起こさないことを確認するためにいくつかのテストを実行し、ヒープサイズの増加が原因であると結論付けました。
今は理解できません。システムはhugePagesがまったく使用されていないことを示しているため、まだ40Gのスペースが残り、Javaはまだそのうち30Gを保持できません。
なぜこれが起こるのかを説明できる人はいますか?
もっと重要なのは、これが起こらないようにする方法がありますか?
これは本番システムなので、最終構成を作成すると残りのスペースがないため、巨大ページの外部でJavaプロセスを実行することはできません。最終構成は96G大容量ページで、1つの32GB Javaプロセスが継続的に機能し、リソースが緊急時に他の2つのプロセスを実行するようにスケジュールされています。このような緊急事態が発生した場合は、JavaプロセスがhugePagesを使用できることを確認する必要があります。
どんな助けでもいいでしょう。
答え1
JVMで巨大なページ使用を明示的に有効にする必要があると思います-XX:+UseLargePages
。この投稿を確認してください。大規模なJavaヒープとLinuxの大規模ページの調整。
他の関連JVMスイッチを確認したい場合があります。
答え2
また、/etc/security/limits.confで「memlock」パラメータを確認する必要があります。このパラメータが十分に高い値に設定されていないと、JVMを実行しているユーザーは、巨大なページが十分に構成されていても巨大なページを割り当てることができません。 (割り当てが必要な場合は、memlockが30GB以上に設定されていることを確認してください。)