Java 如何在JVM中强制/复制FullGC?

Java 如何在JVM中强制/复制FullGC?,java,garbage-collection,jvm,apache-zookeeper,heartbeat,Java,Garbage Collection,Jvm,Apache Zookeeper,Heartbeat,有没有办法在JVM中强制/复制FullGC达x秒?基本上,我需要这个来验证某个基于心跳的应用程序(zookeeper的客户端)出现问题的根本原因 编辑:unix命令是否模拟FullGC(停止世界行为)?您可以在热点JVM上模拟很长时间的停止世界事件,从用户的角度来看,这类似于FullGC HotSpot不会放入计数的int循环,因为它假定它们将“足够快”终止(在这种情况下,服务器编译器将生成更优化的循环代码)。即使是一次停止,世界也要等到这个循环结束。在下面的示例中,我们有一个非常紧密的循环,它

有没有办法在JVM中强制/复制FullGC达x秒?基本上,我需要这个来验证某个基于心跳的应用程序(zookeeper的客户端)出现问题的根本原因


编辑:unix命令是否模拟FullGC(停止世界行为)?

您可以在热点JVM上模拟很长时间的停止世界事件,从用户的角度来看,这类似于FullGC

HotSpot不会放入计数的int循环,因为它假定它们将“足够快”终止(在这种情况下,服务器编译器将生成更优化的循环代码)。即使是一次停止,世界也要等到这个循环结束。在下面的示例中,我们有一个非常紧密的循环,它在没有safepoint轮询的情况下进行小而昂贵的计算:

public static double slowpoke(int iterations) {
    double d = 0;
    for (int j = 1; j < iterations; j++) {
        d += Math.log(Math.E * j);
    }
    return d;
}
为了增加延迟,只需更改
slowpoke(int迭代)
函数的参数值

以下是有用的诊断命令:

  • -XX:+PrintGCApplicationStoppedTime
    这实际上会将所有安全点的暂停时间报告到GC日志中。不幸的是,此选项的输出缺少时间戳
  • -XX:+PrintSafepointStatistics–XX:PrintSafepointStatisticsCount=1
    这两个选项将强制JVM报告每个安全点之后的原因和计时
编辑
关于编辑:从用户的角度来看,
kill-STOP
kill-CONT
与STW具有相同的语义,即应用程序不响应任何请求。但是,这需要访问命令行,并且不消耗资源(CPU、内存)。

您可以在HotSpot JVM上模拟一个非常长的停止世界事件,从用户的角度来看,它类似于FullGC

HotSpot不会放入计数的int循环,因为它假定它们将“足够快”终止(在这种情况下,服务器编译器将生成更优化的循环代码)。即使是一次停止,世界也要等到这个循环结束。在下面的示例中,我们有一个非常紧密的循环,它在没有safepoint轮询的情况下进行小而昂贵的计算:

public static double slowpoke(int iterations) {
    double d = 0;
    for (int j = 1; j < iterations; j++) {
        d += Math.log(Math.E * j);
    }
    return d;
}
为了增加延迟,只需更改
slowpoke(int迭代)
函数的参数值

以下是有用的诊断命令:

  • -XX:+PrintGCApplicationStoppedTime
    这实际上会将所有安全点的暂停时间报告到GC日志中。不幸的是,此选项的输出缺少时间戳
  • -XX:+PrintSafepointStatistics–XX:PrintSafepointStatisticsCount=1
    这两个选项将强制JVM报告每个安全点之后的原因和计时
编辑
关于编辑:从用户的角度来看,
kill-STOP
kill-CONT
与STW具有相同的语义,即应用程序不响应任何请求。但是,这需要访问命令行,并且不消耗资源(CPU、内存)。

谢谢!!你能检查更新的问题描述吗!!你们能检查更新的问题描述关于编辑部分,我发现了以下内容,但它不会回答关于编辑部分,我发现了以下内容,但它不会回答
Delay 5
Delay 4
Delay 30782
Delay 21819
Delay 21966
Delay 22812
Delay 22264
Delay 21988