我们正在使用Wildfly 10.1.0和Resteasy 3.1.1。在数百rps的吞吐量下,即使平均延迟非常低,我们也会看到随机长的请求。
我们正在查看New Relic在我们的应用程序中生成的指标。我们注意到一小部分请求,约1%被困在“HttpServlet30Dispatcher.service()”里面,这是一个Resteasy lib函数。对于卡在那里的请求,它看起来像HttpServlet30Dispatcher(或其下面的一些代码)消耗该请求的100%的时间。我们看到通常需要50毫秒的请求可以达到20秒+。
有谁知道这会导致什么?感觉Wildfly可能会阻止等待免费线程的请求,并且可能发生线程饥饿。任何人都可以确认,或者有关如何描述这个的任何建议吗?
谢谢! 马特
答案 0 :(得分:1)
答案是这些是由网络速度慢引起的。通过使用chrome开发工具并设置网络下载速度非常慢,我能够证明这一点。
wildfly中发生的事情是这是缓冲响应的地方。因此,慢速的网络客户端将导致此功能被阻止。
Newrelic是我们正在使用的工具,无法过滤掉这些请求,它们增加了我们的APDEX总体得分,这很烦人。
这实际上并不表示您的代码或应用服务器配置中有任何问题。请注意,发生这种情况时,速度较慢的网络客户端会占用线程。我已经能够在NodeJS中重现相同的问题,并且我想在其他应用服务器中也是如此。我本来可以使用NIO进行野生操作,但我可以断定这不会发生。
IO缓冲有很多解决方案-您可以使用NGonx或其他代理为您进行缓冲,而您的应用服务器将不必这样做。