在我们的prod服务器中,对外部服务的请求经常开始超时和失败。之前是短暂的高响应时间。有趣的是,我们有一系列相同的服务器调用相同的服务(Apple Purchase和/或Facebook),只有一个节点的响应时间很长。因此,它不仅服务缓慢。这个问题很少见,难以重现,但仍然非常令人担忧。
节点上的线程计数和内存计数看起来很好,没有例外只是超时。重新启动Java进程将始终解决此问题。
从查看我们的响应时间图表看,如果外部服务实际上缓慢了一段时间但是然后恢复了我们的一些节点仍然看到该节点已关闭。这只是一个猜测,因为缓慢的响应时间可能只是我们方面的一个错误的函数。
我在下面添加了一个代码摘录,我们为每个请求创建一个新的交换对象,所以我很确定没有错误的数据缓存。
public void doSomething() {
HttpExchange httpExchange = new HttpExchange();
httpExchange.setURL("SOME_URL");
httpExchange.setMethod("GET");
httpExchange.setEventListener(listener);
httpExchange.setTimeout(this.timeout);
this.client.send(httpExchange);
}
有没有人看过Jetty HttpClient的类似问题? 是否有任何已知的边缘情况会导致Jetty Http Client以这种方式运行? Jetty内部是否有任何共享对象,我应该查看它是否超载错误?
答案 0 :(得分:0)
仅供参考,我在网站上发布了一个Bug Tracking,我们终于有了一套很好的可重复性步骤,一个解决方案和修复工作。
然而,对于平均时间的修复“我目前通过在我的.onExpire()事件处理程序中调用HttpExchange.cancel()来解决这个问题。你能测试同样的修复吗?” - 西蒙斯韦德看到Bug Tracking