- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在多台服务器上安装了 JDK 8,堆大小不断增加,直到达到 90%,应用程序失败。在此期间,多个 GC 运行,但老年代不断增长,直到应用程序失败。当前的解决方法是重新启动 Tomcat。我的服务器有 15GB RAM,4 核 CPU。我的 Java 设置是:
-Xms12036M -Xmx12036M -Xmn800M
对这些值有什么建议吗?我以为 GC 会处理它,但老年代似乎不会。我是 Java 的新手,不确定这是否表示存在内存泄漏,或者 GC 是否没有执行此类操作?
最佳答案
首先使用 JStacks/JMaps、线程转储和内存分析器工具检查内存泄漏。如果您的系统内存没有任何泄漏,则必须微调垃圾收集器算法。
Java 提供了不同类型的垃圾收集器。
看看各种优势和劣势GC algorithms
串行收集器:串行收集器是最简单的收集器,您可能不会使用它,因为它主要是为单线程环境设计的。
并行/吞吐量收集器:它最大的优点是使用多个线程扫描并压缩堆。并行收集器的缺点是它会在执行次要或完整 GC 收集时停止应用程序线程。
CMS 收集器:此算法使用多个线程(“并发”)扫描堆(“标记”)以寻找可以回收(“扫描”)的未使用对象。如果您增加老年代(或整个堆)的大小或为收集器分配更多后台线程,这将是高效的。它使用更多 CPU 以便为应用程序提供更高水平的连续吞吐量。
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/
我刚刚安装了Protractor v2.0.0 .我尝试添加 beforeAll测试并出错 ReferenceError: beforeAll is not defined 查看堆栈跟踪,我看到 ja
我有几个基于 UIKit 的 iOS 应用程序已在 AppStore 上发布,我想更新这些应用程序,并且我考虑切换到 SwiftUI。 我的问题是:对于已经拥有该应用但运行早于 iOS13 的 iOS
我有几个基于 UIKit 的 iOS 应用程序已在 AppStore 上发布,我想更新这些应用程序,并且我考虑切换到 SwiftUI。 我的问题是:对于已经拥有该应用但运行早于 iOS13 的 iOS
我正在构建一个包,我计划在很多应用程序中重复使用它。这个包包含一个“串行端口管理器”:无论我要构建什么应用程序,我总是需要设置通信端口和相关参数。 有一种方法可以在包内拥有一个包含所有所需代码的 JF
我是一名优秀的程序员,十分优秀!