У меня такая же проблема с Undertow. Около 30% соединений отклоняются, когда я обращаюсь к серверу с помощью java-клиента.
Когда я использую ab.exe (ApacheBench), у меня 0% отказов, даже если я использую 1000 одновременных подключений (кажется, это касается предела в Windows 7).
Странно то, что мне отказывают в соединении только тогда, когда я использую java-клиент, который открывает соединения. Я открываю 800 одновременных соединений с java, и многие из них отклонены. Я пробовал тест даже с тайм-аутом сокета 1000 мс. Вот фрагмент моего java-клиента, который открывает соединения:
URL url = new URL("http://localhost/testWeb/test2");
URLConnection testConnection = url.openConnection();
testConnection.setConnectTimeout(1000);
testConnection.setReadTimeout(1000);
InputStream is = testConnection.getInputStream();
Странная вещь, как я уже упоминал, заключается в том, что тесты ab.exe работают нормально:
c:\work\dotera\servers\apache\bin>ab -n 10000 -c 1000 http://localhost:8080/testWeb/test
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Finished 10000 requests
Server Software: WildFly/8
Server Hostname: localhost
Server Port: 8080
Document Path: /testWeb/test
Document Length: 108 bytes
Concurrency Level: 1000
Time taken for tests: 5.302303 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 3620000 bytes
HTML transferred: 1080000 bytes
Requests per second: 1885.97 [#/sec] (mean)
Time per request: 530.230 [ms] (mean)
Time per request: 0.530 [ms] (mean, across all concurrent requests)
Transfer rate: 666.69 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 12.2 0 998
Processing: 56 478 316.6 320 1319
Waiting: 9 320 327.2 198 1291
Total: 56 479 316.7 320 1319
Percentage of the requests served within a certain time (ms)
50% 320
66% 326
75% 841
80% 847
90% 893
95% 1302
98% 1310
99% 1314
100% 1319 (longest request)
c:\work\dotera\servers\apache\bin>
Я думаю, что это может помочь понять природу проблемы.
Еще одна вещь, которую следует упомянуть, это то, что запуск тех же тестов на клиенте node.js с клиентом java и ab.exe дает 0% сбоев.
==========================================================================
Я сделал еще один тест. Что я изменил, так это поместил nginx перед wildfly, чтобы лучше понимать запросы. Тест java снова выдал «java.net.ConnectException: Отказано в соединении: соединение», и здесь интересно то, что nginx вообще не регистрирует неудачные запросы.
Вот сценарий:
- журналы доступа nginx пусты.
- Я делаю 1100 запросов из java-потоков, запущенных вместе.
- У меня есть 177 запросов от клиента, который выдает "java.net.ConnectException"
- В журналах доступа nginx у меня зарегистрировано 923 запроса с HTTP CODE 200 - OK, и у меня нет других зарегистрированных запросов.
Это наводит меня на мысль, что есть проблема с открытием клиентских сокетов с той же машины в java. Может, с Undertow и нет проблем, просто клиент глючит.
Для меня загадкой было то, почему тот же тест, запущенный для nodejs, не потерпел неудачу, но после нескольких запусков он потерпел неудачу на чистом nodejs HelloWorld с «java.net.ConnectException: Отказ в соединении: подключение».
Вывод для меня такой, что есть проблема с клиентом, который работает под java. Нет проблем с Undertow (Wildfly/8.1)
person
Borislav Markov
schedule
14.09.2014