Java 如何知道JVM当前是否正在执行GC?

Java 如何知道JVM当前是否正在执行GC?,java,garbage-collection,jvm,load-balancing,Java,Garbage Collection,Jvm,Load Balancing,我有一个用例,如果服务的JVM当前正在执行GC,我需要停止向java restful服务发送请求。哪种API可以帮助我找到这个?您可能可以使用visualVM及其API来实现这一点。VisualVM是GC过程的可视化。但它也有自己的API。 有不同的方法来监控GC,但唯一的区别是GC操作信息的显示方式。GC是由JVM完成的,由于GC监视工具公开了JVM提供的GC信息,因此无论您如何监视GC,都会得到相同的结果 GC监控方法可根据访问界面分为CUI和GUI。典型的CUI GC监控方法涉及使用一个名

我有一个用例,如果服务的JVM当前正在执行GC,我需要停止向java restful服务发送请求。哪种API可以帮助我找到这个?

您可能可以使用visualVM及其API来实现这一点。VisualVM是GC过程的可视化。但它也有自己的API。

有不同的方法来监控GC,但唯一的区别是GC操作信息的显示方式。GC是由JVM完成的,由于GC监视工具公开了JVM提供的GC信息,因此无论您如何监视GC,都会得到相同的结果

GC监控方法可根据访问界面分为CUIGUI。典型的CUI GC监控方法涉及使用一个名为“jstat”的单独CUI应用程序,或者在运行JVM时选择一个名为“verbosegc”的JVM选项

jstat是HotSpot JVM中的一个监视工具。HotSpot JVM的其他监视工具是jps和jstatd。有时,您需要这三种工具来监视Java应用程序


-verbosegc是运行Java应用程序时指定的JVM选项之一。虽然jstat可以监视任何未指定任何选项的JVM应用程序,但需要在开始时指定-verbosegc,因此它可能被视为一个不必要的选项(因为可以使用jstat)。

为什么要这样做?您可以用一个简单的请求ping服务,如果它没有响应,它就忙了。如果您希望以断言的方式执行此操作,您可以将服务流作为心跳信号发送到负载平衡器,如果此操作暂停,您会认为它很忙。是的,我同意这会起作用。但是我正在探索是否可以找到一种更干净的方法,比如我的JMX/监控代理可以告诉我的负载平衡器JVM正在启动它的GC。因此,在我说请求完成之前不要发送任何请求。如果stop the world GC正在进行中,那么JMX或任何其他Java API都不会工作,因为它也会受到GC的影响。若一个并发GC正在进行中,你们不应该在意,因为应用程序仍然能够响应。这只是另一个检查然后反模式的应用程序。在您检测到目前没有垃圾收集之后,当您开始提交请求时,是什么阻止了垃圾收集的开始?很抱歉,您可以详细说明一下,因为当您说VisualVm有自己的API时,这听起来很有趣。据我所知,VisualVM作为一个客户机,基本上使用JMX及其MBean来获取信息,我想是通过池来实现的。但是,如果说发生了重大GC,第三个应用程序/客户端如何使用它来做一些事情呢?参考任何文章也会很有用。我看到他们有自己的API,你需要搜索它。我还没试过