Я нагрузочно тестирую свой сервер Spring Boot с JMeter и имею
application.properties
server.tomcat.accept-count=100000
server.tomcat.max-threads=1000
Application.java
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(Application.class, args);
ServerProperties serverProperties = context.getBean(org.springframework.boot.autoconfigure.web.ServerProperties.class);
Tomcat tomcat = serverProperties.getTomcat();
Logger.getLogger(Application.class.getName()).info("acceptCount = " + tomcat.getAcceptCount());
Logger.getLogger(Application.class.getName()).info("maxConnections = " + tomcat.getMaxConnections());
Logger.getLogger(Application.class.getName()).info("maxThreads = " + tomcat.getMaxThreads());
Console
2019-10-24 20:22:31.174 INFO 57472 --- [ restartedMain] c.s.s.Application : acceptCount = 100000
2019-10-24 20:22:31.174 INFO 57472 --- [ restartedMain] c.s.s.Application : maxConnections = 10000
2019-10-24 20:22:31.175 INFO 57472 --- [ restartedMain] c.s.s.Application : maxThreads = 1000
loadtest.jmx
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">100</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">10000</stringProp>
<stringProp name="ThreadGroup.ramp_time">10</stringProp>
(10000 пользователей x100 циклов = 1 миллион запросов)
В JMeter View Results Tree
я вижу ошибки:
Response code: Non HTTP response code: java.net.SocketTimeoutException
Response message: Non HTTP response message: Read timed out
Summary Report
показывает, что он получил до 11 000 выборок, прежде чем ошибки остановили тест. Я не понимаю, потому что со счетчиком принятия 100 000, не должен ли он принять 100 000 подключений в очереди, прежде чем он начнет давать отклонения и заставить JMeter получить исключение SocketTimeoutException?
Я также пытался accept-count=10000
, max-connections=1000
, и JMeter получил до 8000 выборок, максимальное время 12000 мс (время ожидания 30 с при HTTP Request
), и выдал ошибку Response code: Non HTTP response code: org.apache.http.conn.HttpHostConnectException
Response message: Non HTTP response message: Connect to localhost:8080 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect
. Он должен как минимум поставить в очередь 10 000 соединений, прежде чем отказаться.