웹 응용 프로그램에 대해 실행할 벤치마킹 도구를 쓰고 있습니다. 내가 직면하고있는 문제는 서버에 대한 첫 번째 요청이 항상 후속 요청보다 훨씬 오래 걸린다는 것입니다. 아파치 http 클라이언트 3.x, 4.x 및 Google http client에서이 문제가 발생했습니다. apache http 클라이언트 4.x가 가장 큰 차이점을 보여줍니다 (첫 번째 요청은 후속 요청보다 약 7 배 오래 걸림). Google 및 3.x의 경우 약 3 배 더 길어졌습니다.Java - 특정 호스트에 대한 첫 번째 HTTP 요청이 상당히 느림
내 도구는 동시 요청을 벤치마킹 할 수 있어야합니다 스레드와 함께 .HttpClient 인스턴스 하나를 사용할 수 없으며 모든 스레드에서 호출 할 수 있습니다. 동시성 예외가 발생하기 때문에 각 스레드에서 하나의 요청 만 실행하는 개별 인스턴스를 사용해야합니다.
나는이 동작을 이해하지 못한다. 고려해야 할 webapp는 (내 지식에) 캐싱을 사용하지 않기 때문에 서버의 캐싱 메커니즘 때문이라고 생각하지 않는다. 그리고 b)이 효과는 처음 다시 볼 때 표시됩니다. questing www.hostxy.com 그리고 이후 www.hostxy.com/my/webapp.
client.execute(get)
또는 get.execute()
을 호출하기 전과 후에 System.nanoTime()을 사용합니다.
누구나이 문제의 원인을 알 수 있습니까? 이 httpclient 자체가 캐싱을 수행합니까? 나는 어떤 힌트에 대해서도 매우 감사 할 것입니다.
계속 작동 시키려고했으나 성공했는지 확실하지 않습니다. 그럼에도 불구하고 이후의 요청 사이에 25 초를 기다리면 차이가 발생합니다.이 시간에는 활성 상태의 타임 아웃이 발생 했어야합니까, 그렇지 않았습니까?나는 또한 왜 아파치 http 클라이언트 4.x가 3.x보다 훨씬 오래 걸리는지 이해하지 못한다. – feob
흠. 내가 너라면 Wireshark를 채찍질하고 철조망이 무엇인지 확인해 볼거야. 또한 HttpClient 용 PoolingClientConnectionManager에 대해 읽어보십시오. 이렇게하면이 문제를 피하는 방법에 대한 아이디어를 얻을 수 있습니다. –