2024-10-26
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/7454042356

回答

执行过于频繁是没有一个特定的标准的,它跟应用服务器的各项指标、应用的负载都存在一定的关系。大明哥认为一台 4C8G 的服务器,Young GC 的执行频率应该在 8 ~10 秒,即一分钟执行 10 次左右都属于正常现象。如果2 ~ 3 秒就执行一次,则是过于频繁。

Young GC 执行过于频繁无外乎两个原因:

  1. 应用程序创建对象过快
  2. 新生代内存设置太小

如果新生代内存的设置问题,则可以通过调整 -Xmn-XX:SurvivorRatio 等参数设置来解决问题。如果参数设置正常,则就需要借助一些工具(如 MAT)来分析 dump 文件进一步排查。在排查过程着重关于排名前几的 Java 对象。

扩展

直接看 GC log 是很费神,而且还不直观,大明哥推荐一款超级好用的 GC日志可视化分析工具 GCeasy,通过它,我们可以很方便地看到JVM各个分代的内存使用情况、垃圾回收次数、垃圾回收的原因、垃圾回收占用的时间、吞吐量等,这些指标在我们进行JVM调优、分析 JVM 日志的时候非常有用。

具体使用方法可以阅读下面这篇文章:

https://juejin.cn/post/7004009070734606367