JMeter - недостаточно памяти в Linux

Я пытаюсь запустить нагрузочный тест для приложения. Для этого я использую JMeter (v.2.13) на Ubuntu Vm с 60 ГБ оперативной памяти и более чем достаточно мощности процессора. Цель состоит в том, чтобы достичь 10 тысяч пользователей, подключенных через WebSocket.

Однако во время тестовых прогонов я получаю следующие ошибки на ssh-консоли (примерно от 1.5k до 2.5k симулированных пользователей)

OpenJDK 64-Bit Server VM warning: Attempt to protect stack guard pages failed.
OpenJDK 64-Bit Server VM warning: Attempt to deallocate stack guard pages failed.
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f20ee653000, 12288, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 12288 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /jmetertests/jm/bin/hs_err_pid1833.log
OpenJDK 64-Bit Server VM warning: Attempt to deallocate stack guard pages failed.
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f2218de8000, 12288, 0) failed; error='Cannot allocate memory' (errno=12)

Упомянутый файл отчета об ошибке выглядит следующим образом

# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 12288 bytes for committing reserved memory.
# Possible reasons:
#   The system is out of physical RAM or swap space
#   In 32 bit mode, the process size limit was hit
# Possible solutions:
#   Reduce memory load on the system
#   Increase physical memory or swap space
#   Check if swap backing store is full
#   Use 64 bit Java on a 64 bit OS
#   Decrease Java heap size (-Xmx/-Xms)
#   Decrease number of Java threads
#   Decrease Java thread stack sizes (-Xss)
#   Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
#  Out of Memory Error (os_linux.cpp:2798), pid=1833, tid=140472285792000
#
# JRE version: OpenJDK Runtime Environment (7.0_75-b13) (build 1.7.0_75-b13)
# Java VM: OpenJDK 64-Bit Server VM (24.75-b04 mixed mode linux-amd64 )
# Derivative: IcedTea 2.5.4
# Distribution: Ubuntu 14.04 LTS, package 7u75-2.5.4-1~trusty1
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again

Я попытался выделить больше памяти, изменив файл jmeter.sh, добавив следующую строку непосредственно перед тем, как команда java будет введена в файл .sh:

JVM_ARGS="-Xms5g -Xmx20g -Xss300k"

Я также попытался установить_JAVA_OPTIONS переменная окружения с помощью следующей команды

export _JAVA_OPTIONS="-Xms5g -Xmx20g"

И наконец я нашел эту команду в каком-то SO-потоке

sysctl -w vm.max_map_count=500000

top-Команда дает мне следующую информацию о памяти

KiB Mem:  61836576 total, 15163400 used, 46673176 free,    10636 buffers
KiB Swap:        0 total,        0 used,        0 free.    94492 cached Mem
ОБНОВИТЬ

К вашему сведению: я не использую никаких слушателей в JMeter, кроме простого средства записи данных. Однако появляются ошибки, даже если я отключаю последнего слушателя.

java -Xms40g -version

успешно - так что я действительно могу выделить столько памяти

Я уменьшил размер стека с помощью

-Xss300k

что помогло, по крайней мере, что-то изменило, как я теперь получаю

Uncaught Exception java.lang.OutOfMemoryError:
unable to create new native thread. See log file for details.

ошибка. Кажется, что количество потоков в системе исчерпано?

Update2

в соответствии с просьбой некоторых пользователей результаты уфulimit -a

core file size          (blocks, -c) 0
scheduling priority             (-e) 0
pending signals                 (-i) 491456
max locked memory       (kbytes, -l) 64
open files                      (-n) 500000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
max user processes              (-u) 491456
... all other entries are set to 'unlimited'

и limit.conf содержит следующие записи

*         hard    nofile      900000
*         soft    nofile      900000
root      hard    nofile      900000
root      soft    nofile      900000

Кроме того, я установилthreads-max подproc/sys/kernel до чего-то нелепо высокого, а также увеличилось значениеproc/sys/vm/max_map_count

Я что-то пропустил или я сделал что-то не так? Спасибо за помощь.

Ответы на вопрос(2)

Ваш ответ на вопрос