在java中查找服务器响应时间

时间:2016-07-11 15:44:19

标签: java http httpclient

我正在使用第三方服务并使用httpClient调用它们。 虽然我可以使用代码

来衡量请求的总时间
    long startTime = System.currentTimeMillis();        
    result = httpClient.execute(request);
    long endTime = System.currentTimeMillis();

我的问题是请求的总时间非常长。然而第三方否认这一统计数据。因此,我想要在第三方服务器上花费的网络延迟v / s时间的细分。

有没有办法在java中执行此操作

2 个答案:

答案 0 :(得分:2)

从Java代码的角度来看,无法看到服务器上花费的时间与网络延迟或传输时间的细分。

要进行正确的计算,您需要

  1. 分析连接以确定平均往返时间和可用网络带宽。
  2. 然后使用Wireshark检查网络流量并计算延迟的大致细分(端到端延迟,与ping时间松散相同),传输延迟(数据大小除以带宽)和服务器响应延迟。
  3. 这仍然不能告诉您延迟是由于服务器速度缓慢还是您与代理和延迟流量的服务器之间的某种原因造成的。例如,终端服务器可能非常快,但响应可能会被执行深度数据包检查的防火墙(您的或他们的)延迟,并且该任务的能力不足。它几乎不会影响ping / traceroute但严重延迟大数据流。真正调试这将需要与您和服务器之间的所有设备的所有者合作,这可能是一种令人沮丧的经历。

答案 1 :(得分:1)

经过一番努力,我能够找到响应时间的分割,我已经使用curl& java中的ProcessBuilder。任何人都面临同样的问题PFB代码做同样的事情

String OUTPUT_FORMAT = "\ntime_namelookup:    %{time_namelookup}\ntime_connect:  %{time_connect}\ntime_appconnect:  %{time_appconnect}\ntime_pretransfer:  %{time_pretransfer}\ntime_redirect:  %{time_redirect}\ntime_starttransfer:  %{time_starttransfer}\n----------\ntime_total:  %{time_total}\n";
ProcessBuilder pb = new ProcessBuilder(CURL,"-w" ,OUTPUT_FORMAT, "www.yoursite.com");
Process p = pb.start();
InputStream is = p.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
Integer i = null;
StringBuilder stringBuilder = new StringBuilder();
while ((i = bis.read()) != -1) {        
    stringBuilder.append((char) i.byteValue());
}
System.out.println(stringBuilder);

您的输出应采用以下格式

time_namelookup:  0.286
time_connect:  0.297
time_appconnect:  0.000
time_pretransfer:  0.298
time_redirect:  0.000
time_starttransfer:  0.317
----------
time_total:  0.317