Java http клиент и потоки - PullRequest
       4

Java http клиент и потоки

1 голос
/ 20 октября 2011

Я пишу быстрый тест для нашего API с использованием testNG и Java-клиента http. Кажется, мои потоки блокируют больше, чем ожидалось, поэтому я хочу убедиться, что http-клиент делает то, что я думаю. мой основной псевдокод

class 1
    @test method{
     some junk
     myHttpWrapper my = new myHttpWrapper()
    }

class 2   
    public myHttpWrapper{
      HttpClient client = new DefaultHttpClient();
      bunch of packaging up a post params
      HttpResponse response = client.execute(post);
    }

Поэтому я говорю testNG запускать мой @test 5000 раз в 120 потоках. Я вижу много блокирующих потоков в консоли Java. Это не мой код, а, по сути, поток того, что я делаю. Я ожидаю, что каждый поток testNG порождает для моего теста также порождение отдельного http-клиента. Если это так, почему все потоки блокируются.

Вот типичный стек потоков из блока, как видно в jconsole:

java.net.SocketInputStream.socketRead0(Native Method)
java.net.SocketInputStream.read(SocketInputStream.java:129)
org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:149)
org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:110)
org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:264)
org.apache.http.impl.conn.LoggingSessionInputBuffer.readLine(LoggingSessionInputBuffer.java:115)
org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:98)
org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:252)
org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:281)
org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:247)
org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:219)
org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:298)
org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:645)
org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:464)
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
ss.qa.test_files.HTTP_Methods.sendPost(HTTP_Methods.java:91)
ss.qa.test_files.apiHelper.ActivateCoupon(apiHelper.java:376)
ss.qa.test_scripts.myPerfTest.ActivateCoupon(BACPerfTest.java:85)

Ответы [ 2 ]

0 голосов
/ 20 октября 2011

На какой операционной системе вы работаете?Java довольно хорошо защищает вас от конкретных деталей и ограничений вашей хост-ОС, но одна вещь, которую она не может сделать, превосходит количество допустимых сетевых подключений, которые позволят ядро ​​вашей ОС, сетевой драйвер и сетевое оборудование,в сочетании.

С http://www.techiecorner.com/34/how-to-adjust-your-window-xp-tcp-connection-to-boost-your-bt-download-speed/:

С выпуском Microsoft Windows XP с пакетом обновления 2 (SP2) ограничение одновременного TCP-соединения ограничено 10 соединениями.в секунду [ sic ].

0 голосов
/ 20 октября 2011

Возможно, в это время он ожидает в сети.

Может помочь, если вы разместите свой код, связанный с TestNG.

...