3

やりたいこと

GC が物事を動かさないようにするには、ダイレクト メモリを使用する必要があります。それらのために巨大なページを有効にしたいと思います。

ここのところ

フラグ -XX:+UseLargePages は、ヒープ バッファー (非直接 ByteBuffers) を使用する場合は正常に機能しますが、DirectByteBuffers を使用する場合は機能しなくなりました。MappedByteBuffers と hugetlbfs ファイルシステムも使用してみました。これは機能しますが、いくつかの問題が発生するため、別の解決策を探しています。

CentOS リリース 6.3、ホットスポット、jdk1.7 の構成

[編集]

hotspot のソース コードを見ると、malloc を使用して Unsafe でメモリを割り当てていますが、巨大なページを使用するには shmat/shmget または mmap が必要でした。

[編集] 非ヒープメモリの理由

私たちは、メモリ内データベースの NUMA コンテキストにあり、多くの長期間有効なオブジェクトがあります。UseNUMA フラグがオンの場合、JVM は古い世代を分割しません。ダイレクト メモリを使用すると、メモリを必要とするスレッドの近くにメモリを保持できます。

DirectByteBuffers を使用する決定には、明らかにベンチマークが大きな役割を果たしました。DirectByteBufferを使用する必要があるかどうかを尋ねているのではなく、質問に対する答えを探しています。

4

3 に答える 3

0

GC 再配置がアプリケーションのボトルネックであることを明確に示すベンチマークはありますか?

そうでない場合は、これを行わないでください。

もしそうなら、査読できるようにリンクを追加してください。

これらの種類の低レベルの効果は、パフォーマンスの問題の原因として特定するのが難しいことで有名であり、ファントム効果を追跡し、JVM をバイパスしようとするソリューションを作成するために多くの時間を浪費する可能性が非常に高く、パフォーマンスが大幅に低下します。よく踏まれた道にこだわった場合に得られるよりも。

于 2013-05-06T11:21:21.567 に答える
0

興味のある方は、オラクルのバグレポートへのリンク

対応するopenJDK チケットへのリンク。今のところ直らないのでクローズ。Linux では、THP 機能が役立つ場合がありますが、独自の問題がたくさんあります。

于 2014-03-28T09:32:24.497 に答える