Что означает это сообщение java.net.ConnectIOException/Too many open files на терминале Jmeter-сервера?

Я хотел бы провести нагрузочный тест с помощью Jmeter. На вычислительном движке Google я создал 5 виртуальных машин, один работающий сервер tomcat, один работающий мастер jmeter и три работающих сервера jmeter. Мой план тестирования — это всего лишь HTTP-запрос на заставку (т. е. домашнюю страницу по умолчанию, http://***.***.***.***/8080) tomcat. В каждом подчиненном устройстве 5000 пользователей, и план будет выполнен через 5 минут.

Сообщения на терминале мастера jmeter следующие:

Writing log file to: /opt/apache-jmeter-3.1/bin/jmeter.log
Creating summariser <summary>
Created the tree successfully using aggregate_report.jmx
Configuring remote engine: 10.138.0.4:1099
Configuring remote engine:  10.138.0.5:1099
Configuring remote engine:  10.138.0.7:1099
Starting remote engines
Starting the test @ Wed Jan 11 08:38:17 UTC 2017 (1484123897799)
Remote engines have been started
Waiting for possible Shutdown/StopTestNow/Heapdump message on port 4445
summary + 106604 in 00:00:12 = 9252.2/s Avg:   131 Min:    66 Max:  1439 Err:     0 (0.00%) Active: 2638 Started: 2638 Finished: 0
summary + 359500 in 00:00:30 = 11982.5/s Avg:   441 Min:    66 Max: 17390 Err:     0 (0.00%) Active: 9658 Started: 9658 Finished: 0
summary = 466104 in 00:00:42 = 11224.9/s Avg:   370 Min:    66 Max: 17390 Err:     0 (0.00%)
summary + 326600 in 00:00:30 = 10888.1/s Avg:   735 Min:     0 Max: 43081 Err: 127205 (38.95%) Active: 12167 Started: 12167 Finished: 0
summary = 792704 in 00:01:12 = 11083.7/s Avg:   521 Min:     0 Max: 43081 Err: 127205 (16.05%)

Сообщения об ошибках на терминале jmeter-сервера следующие:

2017/01/11 08:39:39 ERROR - jmeter.samplers.BatchSampleSender: sampleOccurred java.rmi.ConnectIOException: Exception creating connection to: 10.138.0.6; nested exception is: 
        java.net.SocketException: Too many open files
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:631)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
        at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:130)
        at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:194)
        at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:148)
        at com.sun.proxy.$Proxy2.processBatch(Unknown Source)
        at org.apache.jmeter.samplers.BatchSampleSender.sampleOccurred(BatchSampleSender.java:184)
        at org.apache.jmeter.samplers.DataStrippingSampleSender.sampleOccurred(DataStrippingSampleSender.java:111)
        at org.apache.jmeter.samplers.RemoteListenerWrapper.sampleOccurred(RemoteListenerWrapper.java:104)
        at org.apache.jmeter.threads.ListenerNotifier.notifyListeners(ListenerNotifier.java:67)
        at org.apache.jmeter.threads.JMeterThread.notifyListeners(JMeterThread.java:852)
        at org.apache.jmeter.threads.JMeterThread.executeSamplePackage(JMeterThread.java:505)
        at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:418)
        at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:249)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.net.SocketException: Too many open files
        at java.net.Socket.createImpl(Socket.java:460)
        at java.net.Socket.<init>(Socket.java:431)
        at java.net.Socket.<init>(Socket.java:211)
        at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
        at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:148)
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
        ... 15 more

Я думаю, что это исключение произошло на стороне jmeter-сервера. Возможно, некоторые настройки jmeter-сервера неверны. Это ссылки сказал, что использование ulimit -n или редактирование limits.conf может решить эту проблему.
Я попытался записать следующий фрагмент в файл limit.conf, но это не сработало.

* soft nofile 10240 
* hard nofile 20480

На стороне сервера Tomcat:
В файле catalina.out есть сообщения об ошибках на стороне сервера tomcat:

12-Jan-2017 01:41:20.132 SEVERE [http-nio-8080-Acceptor-0] org.apache.tomcat.util.net.NioEndpoint$Acceptor.run Socket accept failed
 java.io.IOException: Too many open files
        at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
        at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250)
        at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:444)
        at java.lang.Thread.run(Thread.java:745)

Я также настроил файл limits.conf, но он все равно не работал.


person niaomingjian    schedule 11.01.2017    source источник
comment
Вы можете проверить журналы целевого сервера на наличие ошибок. Похоже, это больше проблема целевого сервера, который не может обрабатывать входящие соединения и приводит к ошибке или соединения не закрываются.   -  person rachna bafna    schedule 11.01.2017
comment
Были похожие ошибки, слишком много открытых файлов.   -  person niaomingjian    schedule 12.01.2017
comment
Это означает, что ваш сервер не может обрабатывать входящие запросы. Можете ли вы установить ulimit на бесконечность и запустить тест?   -  person rachna bafna    schedule 12.01.2017
comment
Как мне использовать команду ulimit -n? Я пытался, но это не сработало.   -  person niaomingjian    schedule 12.01.2017
comment
Я предлагаю вам проверить работоспособность сервера с точки зрения загрузки ЦП и использования памяти. Запустите тест с меньшим количеством пользователей, скажем, 2000, и посмотрите, столкнетесь ли вы с той же проблемой, и на основе этого результата увеличьте/уменьшите нагрузку.   -  person rachna bafna    schedule 12.01.2017