Изменение количества доступных портов в Linux

Столкнулся с проблемой нагрузочного тестирования при помощи jmeter. Как выяснилось, для каждого потока jmeter забирает порт. В итоге при дефолтных настройках ОС я не могу запустить одновременно более 27000 потоков, то есть имитировать одновременное подключение более чем 27 тыс пользователей. Гугл выдал инфу, что количество портов можно увеличить следующей командой:

echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range

однако в результате я стал получать ошибку java-машины:

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f68e1360000, 65536, 1) failed; error='Cannot allocate memory' (errno=12)

Я перепробовал разные значения, например, 20000 65535, но это ни к чему не привело, тест запускался только с дефолтными значениями 32768 60999. Подскажите, что я сделал не так и как можно увеличить количество доступных для jmeter портов хотя бы до 40 тыс. Ставить еще один сервер с jmeter, а вернее скорей всего два, очень не хотелось бы.


Ответы (2 шт):

Автор решения: Ivan G

Ошибка Cannot allocate memory не связяна с тем, что JMeter не хватает портов, она означает что Java машине недостаточно оперативной памяти (RAM), нужно где-то раздобыть еще немного

Если вы такой крупный специалист по настройке TCP стека ядра Linux вы можете также уменьшить tcp_fin_timeout и включить переипользование портов

Со стороны JMeter можно попробовать включить Same user on each iteration в Thread Group

введите сюда описание изображения

и задать такую вот JMeter Property

httpclient.reset_state_on_thread_group_iteration=false

но это может изменить семантику ваших тестов

→ Ссылка
Автор решения: Hermann Zheboldov

SOLVED. Дело заключалось в том, что jmeter при старте пытается аллоцировать память для всех потоков. У меня стояло 8 гигов, этого хватало на 27 000 соединений. Когда я увеличил память для java-машины jmeter, ошибка пропала

→ Ссылка