开发者社区 > 云原生 > 正文

Nacos2.1.2 jvm配了8g 堆外内存占了7g 这块有没有什么配置?

Nacos2.1.2 jvm配了8g 堆外内存占了7g 整个java进程占了15g
这块有没有什么配置 回收堆外内存或控制堆外内存大小的参数

展开
收起
嘟嘟嘟嘟嘟嘟 2023-11-22 08:05:34 158 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    Nacos使用了大量的堆外内存来存储数据结构和其他资源,例如索引、缓存等。因此,在某些情况下,堆外内存可能会占用大量的系统内存。
    为了回收堆外内存或控制堆外内存的大小,你可以调整Java虚拟机(JVM)的堆外内存分配策略,具体可以通过以下参数实现:

    • XX:MaxDirectMemorySize:设置最大堆外内存大小。例如,如果你想让堆外内存的最大大小为2GB,则可以使用以下参数:-XX:MaxDirectMemorySize=2G
    java -XX:MaxDirectMemorySize=2G ...
    
    • -XX:MaxMetaspaceSize:设置元空间的最大大小。元空间用于存放类加载器和反射数据等元数据。如果元空间过大,也会消耗大量的堆外内存。例如,你可以使用以下参数将元空间的最大大小设为512MB:
    java -XX:MaxMetaspaceSize=512m ...
    
    • -XX:NativeMemoryTracking:开启原生内存跟踪。这可以帮助你更好地了解堆外内存的分配情况,以便于优化堆外内存的使用。
    java -XX:NativeMemoryTracking=detail ...
    
    • -XX:+UseConcMarkSweepGC:启用并发标记清除垃圾收集器(CMS)。这可以更好地回收堆外内存,但是会增加CPU开销。
    java -XX:+UseConcMarkSweepGC ...
    
    • -XX:CMSInitiatingOccupancyFraction:设置触发CMS垃圾收集器的阈值。例如,你可以使用以下参数将触发CMS垃圾收集器的阈值设为70%:
    java -XX:CMSInitiatingOccupancyFraction=70 ...
    
    2023-11-29 15:03:44
    赞同 展开评论 打赏
  • 在Nacos中,要控制堆外内存的大小,可以使用-XX:MaxDirectMemorySize参数来指定JVM能使用的最大堆外内存量。例如,如果您希望设置最大堆外内存为2g,可以在启动命令中添加以下参数:-XX:MaxDirectMemorySize=2g。

    然而,请注意,如果没有指定此参数,则默认的堆外内存大小将是-Xmx减去一个Survivor区的内存量。此外,当空余堆内存小于40%时,JVM会增加堆,直到达到-Xmx的最大限制;而当空余堆内存大于70%时,JVM会减少堆,直到达到-Xms的最小限制。因此,为了避免在每次GC后调整堆的大小,一般建议将-Xms与-Xmx设置为相等的值。

    2023-11-22 10:07:15
    赞同 展开评论 打赏
问答分类:
问答地址:

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
基于JVM的脚本语言开发、运用实践 立即下载
workshop专场-微服务专场-开发者动手实践营-微服务-使用Nacos进行服务的动态发现和流量调度 立即下载
Nacos 启航,发布第一个版本, 云原生时代助力用户微服务平台建设 立即下载