gpt4 book ai didi

Java老年代一直在增长,直到Tomcat重启

转载 作者:行者123 更新时间:2023-11-30 06:11:57 25 4
gpt4 key购买 nike

我在多台服务器上安装了 JDK 8,堆大小不断增加,直到达到 90%,应用程序失败。在此期间,多个 GC 运行,但老年代不断增长,直到应用程序失败。当前的解决方法是重新启动 Tomcat。我的服务器有 15GB RAM,4 核 CPU。我的 Java 设置是:

-Xms12036M -Xmx12036M -Xmn800M 

对这些值有什么建议吗?我以为 GC 会处理它,但老年代似乎不会。我是 Java 的新手,不确定这是否表示存在内存泄漏,或者 GC 是否没有执行此类操作?

最佳答案

首先使用 JStacks/JMaps、线程转储和内存分析器工具检查内存泄漏。如果您的系统内存没有任何泄漏,则必须微调垃圾收集器算法。

Java 提供了不同类型的垃圾收集器。

看看各种优势和劣势GC algorithms

  1. 串行收集器:串行收集器是最简单的收集器,您可能不会使用它,因为它主要是为单线程环境设计的。

  2. 并行/吞吐量收集器:它最大的优点是使用多个线程扫描并压缩堆。并行收集器的缺点是它会在执行次要或完整 GC 收集时停止应用程序线程。

  3. CMS 收集器:此算法使用多个线程(“并发”)扫描堆(“标记”)以寻找可以回收(“扫描”)的未使用对象。如果您增加老年代(或整个堆)的大小或为收集器分配更多后台线程,这将是高效的。它使用更多 CPU 以便为应用程序提供更高水平的连续吞吐量。

  4. G1 收集器:JDK 7 更新 4 中引入的垃圾优先收集器 (G1) 旨在更好地支持大于 4GB 的堆。 G1 收集器利用多个后台线程扫描它划分为区域的堆,范围从 1MB 到 32MB(取决于堆的大小)。使用 –XX:+UseG1Gcflags。

如果您使用的是 G1 收集器,则必须微调区域大小参数。如果 15 GB 是您的堆大小,您的区域大小应该是 (15 GB/2048 ) MB,大约是 7 MB。不要在 New Gen Size 上进行更多实验。您可以坚持使用默认设置,因为此算法使用默认值可提供最佳性能。

看看这篇文章:

https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/g1_gc_tuning.html

关于Java老年代一直在增长,直到Tomcat重启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33417763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com