私はメモリ内の単純な分散型のキーバリューストレージサービスを開発中です。 私の場合は、Igniteをmaven依存関係を使って埋め込みます。Apacheヒープメモリが動作しない(私の推測で)
アプリケーションにはgetおよびput APIという単純なコントローラがあります。
get APIはIgniteキャッシュからオブジェクトを取得し、Put APIはキャッシュを点火するオブジェクトになります。
とにかく、私はロードテストを行い、ビジュアルVMを使ってjvmステータスを監視しました。私はビジュアルgcプラグインとバッファモニタプラグインを使ってダイレクトバッファを使って各ヒープ領域(例えばeden、suv、old)を観察しました。
ロードテストを開始したとき、eden領域は徐々に満たされ、直接バッファではなく古い領域が移動しました。負荷テストが終了したら、ダイレクトバッファは150kbのみを使用しますが、古い領域は512mを使用します。
Image by visualGC
Image by buffer monitor plugin
※データサイズは500メガバイトであるかもしれません。
おそらく、ダイレクトバッファーはほとんど使われていないと思います。どうして?あなたの設定は私の設定です
-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1g -Xmx1g -XX:MaxDirectMemorySize=6g -XX:+AlwaysPreTouch -XX:NewSize=512m -XX:GCTimeRatio=4 -XX:InitiatingHeapOccupancyPercent=30 -XX:ConcGCThreads=4 -XX:+UseParNewGC -XX:+UseTLAB -XX:+ScavengeBeforeFullGC -XX:MaxNewSize=512m -XX:MaxMetaspaceSize=128m -XX:CompressedClassSpaceSize=32m -XX:SurvivorRatio=6 -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:+CMSScavengeBeforeRemark -XX:ParallelGCThreads=6 -XX:MaxTenuringThreshold=5 -XX:MaxGCPauseMillis=1000 -XX:+DisableExplicitGC -XX:+ExplicitGCInvokesConcurrent -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data/log/catalina/cc.rnd.subnode1/GC.log -XX:+CMSClassUnloadingEnabled -Dspring.profiles.active=production