【发布时间】:2018-06-25 11:29:14
【问题描述】:
我有一个用例,如果服务的 JVM 当前正在执行 GC,我需要停止将请求发送到 java restful 服务。如何/哪个 API 可以帮助我找到这个?
【问题讨论】:
-
你为什么要这样做?
-
您可以通过一个简单的请求 ping 服务,如果它没有响应,则说明它很忙。如果您想预测性地执行此操作,您可以让服务流向负载均衡器发送心跳,如果暂停,则假设它很忙。
-
是的,我同意这行得通。但是我正在探索是否可以找到一种更清洁的方法,例如我的 JMX/监控代理可以告诉我的负载均衡器 JVM 将开始其 GC。所以在我说完成之前不要发送任何请求。
-
如果 stop-the-world GC 正在进行 - 那么 JMX 或任何其他 Java API 将无法工作,因为它也会受到 GC 的影响。如果一个并发 GC 正在进行 - 你不应该关心,因为应用程序仍然能够响应。
-
这只是 check-then-act 反模式的另一个应用。在您检测到目前没有垃圾收集后,是什么阻止了垃圾收集在您开始提交请求时立即开始?
标签: java garbage-collection jvm load-balancing