2011-04-23 44 views
4

我使用Apache HttpClient以大约20个POST请求/秒的速度在本地主机上查询HTTP/1.0(不保持活动状态)服务器。我有这样启用TCP_NODELAY:Apache HttpClient在高请求/秒下的随机延迟


val httpParams = new BasicHttpParams() 
HttpConnectionParams.setTcpNoDelay(httpParams, true) 
val client = new DefaultHttpClient(connectionManager, httpParams) 
 

尽管如此,每分钟几次我看到的10-200毫秒发送这样的请求随机延迟(在服务器上显示测量,即延迟在发送)。我检查了一下,这不是垃圾收集器暂停。可能是什么问题?

我试图用C++客户端以相同的速率查询服务器,并没有这种随机延迟,所以我认为这是HttpClient问题。

更新: 我检查了jetty HttpClient实现,它有同样的问题。这可能是FreeBSD上的JVM的一些问题吗?我应该在linux上测试这个,但我手边没有linux服务器。

+0

允许连接到目标主机的连接数量?你调整了这个参数吗? – MJB 2011-04-24 23:36:42

+0

它总是一个连接(由互斥体控制)。 – Michael 2011-04-27 23:32:52

+0

你尝试禁用'http.connection.stalecheck'吗?它只应该是10-30毫秒的延迟,但可能更多是由于DNS到期或其他一些复杂因素。 – Barett 2017-02-02 20:36:01

回答

2

我在这里使用Windows有同样的问题。 在我的情况下,HttpClient引入了大约1秒的延迟,但只是第一次尝试执行一个帖子(我按顺序做了几次)。我尝试了一种解决方法,即为本地主机创建一个“假”帖子并执行它(除了IOException)。通过这样做,我致电真实服务的延迟从大约1秒减少到大约100毫秒。 我还没有提高。

+0

这是另一个bug,你应该禁止等待100-继续: – Michael 2011-05-08 04:26:09