我正在開發簡單的分佈式內存鍵值存儲服務。 在我的情況下,我將Ignite嵌入爲使用maven依賴。Apache Ignite關閉堆內存不工作(在我的猜測)
該應用程序具有簡單的控制器,它是獲取和放置API。
獲取API是從點燃緩存中獲取對象,Put API是放置對象來點燃緩存。
無論如何,我做負載測試,並使用visual vm監視jvm狀態,我使用visual gc插件和使用緩衝區監視器插件的直接緩衝區觀察每個堆區域(例如eden,suv,old)。
當我開始加載測試時,eden區域逐漸填滿並移動舊區域,而不是直接緩衝區。當負載測試結束時,直接緩衝區只使用150kb,而舊區使用512m。
Image by visualGC
Image by buffer monitor plugin
※數據大小可能是500MB。
我想,直接緩衝區幾乎不用。爲什麼?聽到是我的配置
-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