Java 垃圾收集 - CPU 峰值 - 更长的连接建立时间

标签 java jakarta-ee garbage-collection

我们有一个位于负载平衡器后面的服务器池。这个池中的机器平均每 6 秒进行一次垃圾收集。垃圾收集需要将近半秒的时间。我们还看到在垃圾收集期间出现 CPU 峰值。

客户端计算机在一天内连接到服务器的平均时间几乎达到 10%。

理论:CPU 正忙于执行 GC,这就是它无法更快地分配连接的原因。

这是一个有效的理论吗?

JVM:IBM GC算法:gencon 托儿所:5 GB 堆大小:18 GB

最佳答案

我想说的是,对于如此多的分配,所有的赌注都没有了——随着时间的推移,情况绝对会变得更糟,我的意思是,如果你整天每 6 秒执行一次 GC,这似乎有问题。

您可以访问该代码吗?是否可以重写以重用对象并更智能地进行分配?我已经完成了一些嵌入式系统,诀窍是一旦系统启动并运行就永远不要调用 new(如果你能控制整个系统,这是可行的)

如果您无权访问代码,请检查一些可用的 GC 调整选项(包括使用的垃圾收集器的选择)——它们都随 JDK 和第 3 方选项一起分发。您可以通过一些命令行修改来提高性能。

关于Java 垃圾收集 - CPU 峰值 - 更长的连接建立时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8812788/

相关文章:

java - Oracle Java SE JRE 中的 native 类位于何处?

java - 在Java中,我可以扫描字符串并将其存储为小写/大写字符,无论输入如何

Java方法重载错误

java - 尽管向项目添加了构建器,但项目属性未显示构建路径

eclipse - 在 Ubuntu 中从 Eclipse 连接到 TFS 授权失败

java - Java 中 native 资源映射的生命周期(以及如何保持它们同步)

java - ReferenceQueue 中的 WeakReference 是否会自动从队列中删除?

java - 多个数据源对一个数据库具有不同的权限

java - 频繁的主要 gc 但不是空闲堆?

java - 您能解释一下 Java 正则表达式中的这个命名组起始位置吗?