JMeter - Nicht genügend Speicher unter Linux

Ich versuche, einen Auslastungstest für eine Anwendung auszuführen. Dafür benutze ich JMeter (v.2.13) auf einem Ubuntu-VM mit 60 GB RAM und mehr als genug CPU-Leistung. Ziel ist es, 10.000 Benutzer zu erreichen, die über WebSocket verbunden sind.

Während der Testläufe erhalte ich jedoch folgende Fehler auf der ssh-Konsole (bei ca. 1.5k bis 2.5k simulierten Benutzern)

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)

Die erwähnte Fehlerberichtdatei sieht so aus

# 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

Ich habe versucht, mehr Speicher zuzuweisen, indem ich die Datei jmeter.sh geändert habe, indem ich die folgende Zeile hinzugefügt habe, bevor der Java-Befehl in der .sh-Datei ausgegeben wurde:

JVM_ARGS="-Xms5g -Xmx20g -Xss300k"

Ich habe auch versucht, das_JAVA_OPTIONS Umgebungsvariable mit dem folgenden Befehl

export _JAVA_OPTIONS="-Xms5g -Xmx20g"

Und schließlich habe ich diesen Befehl in einem SO-Thread gefunden

sysctl -w vm.max_map_count=500000

Dastop -Befehl gibt mir folgende Informationen zum Speicher

KiB Mem:  61836576 total, 15163400 used, 46673176 free,    10636 buffers
KiB Swap:        0 total,        0 used,        0 free.    94492 cached Mem
AKTUALISIERE

FYI: Mit Ausnahme des einfachen Datenschreibers verwende ich in JMeter keine Listener. Es werden jedoch Fehler ausgegeben, auch wenn ich diesen letzten Listener deaktiviere.

java -Xms40g -version

ist erfolgreich - so kann ich wirklich so viel Speicher zuweisen

Ich habe die Stapelgröße mit @ reduzie

-Xss300k

was geholfen hat, ot zumindest etwas zu ändern, als ich jetzt ein @ bekom

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

Error. Es scheint, dass die Anzahl der Threads im System erschöpft ist?

Update2

wie von einem Benutzer angefordert die Ergebnisse ufulimit -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'

und die limits.conf enthält die folgenden Einträge

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

Additonally habe ich das @ eingestelthreads-max unterproc/sys/kernel zu etwas Lächerlichem hoch und erhöhte auch den Wert vonproc/sys/vm/max_map_count

Habe ich etwas verpasst oder habe ich etwas falsch gemacht? Danke für deine Hilfe

Antworten auf die Frage(4)

Ihre Antwort auf die Frage