Изменение количества доступных портов в 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 шт):
Ошибка 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
но это может изменить семантику ваших тестов
SOLVED. Дело заключалось в том, что jmeter при старте пытается аллоцировать память для всех потоков. У меня стояло 8 гигов, этого хватало на 27 000 соединений. Когда я увеличил память для java-машины jmeter, ошибка пропала