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

在Nacos中,有大佬遇到过这种情况吗?

晚上集中发版时遇到nacos老年代暂满,导致频繁进行full gc,但gc后内存无法降下来。目前有4台机器,每台16核32GB内存,其中老年代分配了10GB。有没有遇到过这种情况的经验分享?另外每个nacos服务内存都分配了20GB,其中年轻代10GB,老年代10GB,总内存为80GB,我的主要问题出现在集中发版时,老年代的内存回收不彻底,发版完成后,情况恢复正常了。

展开
收起
崔问问 2023-11-30 15:19:39 119 0
3 条回答
写回答
取消 提交回答
  • 升级下jdk.垃圾回收的更完美,用jdk11.线程数量.gc性能 优化的都还不错 1、你可以看一下你server节点长轮询连接数是否很不均衡。
    2、我之前遇到的server内存泄漏,是因为/nacos/v1/cs/configs/listener这个长轮询接口在服务端的对象被强引这释放不了。
    3、扩大server内存,升级客户端到2.x。。此回答整理自钉钉群:Nacos社区群(1群满,请加4群:12810027056)。

    2023-12-01 09:06:04
    赞同 展开评论 打赏
  • 您好,根据您的描述,我理解您在集中发版时遇到了Nacos老年代内存暂满的问题。这种情况可能会导致频繁的Full GC,但是GC内存降不下来。您提到每台Nacos服务分配了20G内存,其中年轻代10G,老年代10G,总共80G。主要问题是在集中发版时,感觉老年代的内存回收不掉,发版结束后就正常了。

    首先,Full GC并不频繁,事实上每天有超过两次Full GC就应该考虑GC优化了。结合您的线上监控信息,Full GC之后并没有回收掉多少老年代的内存。这可能是由于From和To区只有7.5M,当每次新生代GC时,如果在这一次GC中存活下来的对象内存大于7.5M,那么会将存不下的那部分直接放入老年代,导致老年代快速增长,触发Full GC。

    其次,您可以尝试调整Nacos的内存参数。根据您提供的信息,您可以在nacos-server下的startup.sh文件中修改内存参数。此外,您还可以根据业务情况来设置最小和最大内存,以避免频繁GC。

    2023-11-30 18:03:21
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    根据您的描述,Nacos 在集中发版时遇到老年代暂满,并且频繁进行 Full GC,但是 GC 后内存没有降下来。以下是一些可能的原因和解决方案:

    1. 调整堆内存分配:您提到每个 Nacos 服务都分配了 20GB 内存,其中年轻代和老年代各占用了 10GB。在集中发版期间,由于大量对象被创建和销毁,老年代可能会出现内存不足的情况。建议适当增加老年代的内存分配,例如将老年代调整为 12GB 或更多。

    2. 调整 GC 算法和参数:根据您的内存配置,您可以考虑采用不同的垃圾收集算法和调整相应的参数。例如,可以尝试使用 G1 垃圾收集器,并调整相关的参数,如 -XX:MaxGCPauseMillis-XX:G1HeapRegionSize 等,以更好地适应大内存配置和集中发版的场景。

    3. 增加服务器数量或分布式部署:如果可能的话,可以考虑增加服务器数量或进行分布式部署。这样可以分散压力并提高整体性能和可伸缩性。

    4. 检查代码质量和资源泄漏:集中发版时可能会导致资源的过度创建和使用,因此请确保代码质量良好,并仔细检查是否存在资源泄漏的情况。

    5. 监控和调优工具:使用适当的监控和调优工具,例如 JDK 的 jstat、jconsole、VisualVM 等,来分析内存使用情况和 GC 行为,以便更好地了解问题所在并进行相应的调整。

    2023-11-30 16:36:10
    赞同 展开评论 打赏
问答分类:
问答地址:

快速交付实现商业价值。

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载