来自Windows操作系统的Ap​​ache HttpPut请求非常慢

时间:2013-12-11 22:28:36

标签: java windows rest httpclient

我正在使用带有HttpPut的Apache DefaultHttpClient来使用REST API上传文件。从Windows运行时它非常慢,它发送240 kb /秒。但是当我从MAC

运行相同的文件时,它会发送950 kb /秒

我没有明确的Windows和Mac OS条件。

任何人都可以帮我解决这个问题。

我的代码:

HttpPut putRequest = new HttpPut("http://my.localhost.com:8888");
FileEntity reqEntity = new FileEntity("c:/test/test.zip","text/plain");
putRequest.setEntity(reqEntity);
putRequest.addHeader("X-Auth-Token",strToken);
httpResponse = client.execute(putRequest);
mResponseCode = httpResponse.getStatusLine().getStatusCode();

4 个答案:

答案 0 :(得分:3)

Java是Write once, run anywhere(WORA)。因此,Windows机器上的HTTP连接速度慢于Mac机器的原因与Java无关。

可能有几个Windows机器问题会降低上传速度。我建议你在elevated命令提示符下按顺序运行以下命令。

禁用接收方缩放:

netsh interface tcp set global rss=disabled

禁用TCP / IP自动调整:

netsh interface tcp set global autotuninglevel=disabled

禁用所有任务卸载:

netsh int ip set global taskoffload=disabled

可以找到有关上述命令的更多详细信息here

如果问题仍然存在,那么你应该

  1. 重新安装测试的网络驱动程序。
  2. 使用网络启动到安全模式以检查结果。如果工作正常,请检查Clean Boot中的结果,以检查哪个第三方工具会对此产生影响。
  3. Shishir

答案 1 :(得分:2)

您是否在Windows计算机上运行了防病毒应用程序?首先尝试禁用,看看是否有任何差异。

答案 2 :(得分:0)

我会尝试这个命令。

netsh int tcp set global autotuninglevel=disabled

如果它没有区别,只需重新启用它

netsh int tcp set global autotuninglevel=enabled

自动调整有时会导致Windows上的TCP问题(坦率地说,我不知道它到底是什么)但是它在过去引起了一些类似的问题,所以也许值得一试。诚然,这可能是很多事情。

更改后你必须重启。

答案 3 :(得分:0)

我认为您的问题与NIC的驱动程序有关,而与Java无关。

转到开始 - >控制面板 - >设备管理器 - >网络适配器 - >您的网卡,右键单击,然后选择属性。

转到“高级”标签。

使用特定于您网卡的设置进行播放,因此我们无法真正帮助您完成设置。你可能会有一些名为" Large Send Offload(IPv4)"可以被禁用。

见到这里:Slow upload speeds on Windows 7