Проблемы с JMeter при запуске большого количества потоков
Я тестирую с помощью Apache Jmeter, я просто просматриваю одну страницу своего веб-сайта и увеличиваю число пользователей до тех пор, пока не достигнет порога, проблема в том, что когда я получаю около 3000 потоков, JMeter не запустить все из них. Глядя на совокупный график
он работает только около 2,536 (это число меняется, но всегда здесь).
Частичный запуск в журналах имеет следующее исключение:
01:16 ERROR - jmeter.JMeter: Uncaught exception:
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Unknown Source)
at org.apache.jmeter.threads.ThreadGroup.start(ThreadGroup.java:293)
at org.apache.jmeter.engine.StandardJMeterEngine.startThreadGroup(StandardJMeterEngine.java:476)
at org.apache.jmeter.engine.StandardJMeterEngine.run(StandardJMeterEngine.java:395)
at java.lang.Thread.run(Unknown Source)
Такое поведение является последовательным. Кроме того, один из случаев, когда JMeter разбился в середине, выдает файл, в котором говорится:
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 32756 bytes for ChunkPool::allocate
# 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 (allocation.cpp:211), pid=10748, tid=11652
#
# JRE version: 6.0_31-b05
# Java VM: Java HotSpot(TM) Client VM (20.6-b01 mixed mode, sharing windows-x86 )
Любые идеи?
Я попытался изменить размер кучи в jmeter.bat, но это не помогло.
Ответы
Ответ 1
JVM просто не способен запускать столько потоков. И даже если это так, JMeter будет потреблять много ресурсов ЦП для чисто переключения контекстов. Другими словами, выше некоторого момента вы не сравниваете свое веб-приложение, а клиентский компьютер, размещая JMeter.
У вас мало вариантов:
-
эксперимент с вариантами JVM, например. уменьшить значение по умолчанию -Xss512K
на меньшее
-
запустить JMeter в кластере
-
использовать инструменты, применяющие радикально иной подход, например Gatling
Ответ 2
У меня была аналогичная проблема и увеличен размер кучи в jmeter.bat до 1024M, и это исправило проблему.
set HEAP=-Xms1024m -Xmx1024m
Ответ 3
Для JVM, если вы читаете hprof, он дает вам некоторые решения, среди которых:
-
переключиться на 64-битный jvm ( > 6_u25)
-
с этим вы сможете выделить больше кучи (-Xmx), убедитесь, что у вас есть эта оперативная память
-
уменьшить Xss с помощью
-Xss256k
Затем для JMeter следуйте рекомендациям:
Наконец, убедитесь, что вы используете последнюю версию JMeter.
Успех будет зависеть от мощности вашего компьютера (процессора и памяти) и вашего плана тестирования.
Если этого недостаточно (для 3000 потоков это должно быть ОК), вам может потребоваться использовать распределенное тестирование
Ответ 4
Увеличение размера кучи в jmeter.bat отлично работает
set HEAP = -Xms1024m -Xmx1024m
ИЛИ
вы можете сделать что-то вроде ниже, если вы используете jmeter.sh:
JVM_ARGS = "- Xms512m -Xmx1024m" jmeter.sh и т.д.
Ответ 5
Я столкнулся с этой же проблемой, и единственным решением, которое помогло мне, было следующее: fooobar.com/questions/35451/...
правильные потоки 100k на linux:
ulimit -s 256
ulimit -i 120000
echo 120000 > /proc/sys/kernel/threads-max
echo 600000 > /proc/sys/vm/max_map_count
echo 200000 > /proc/sys/kernel/pid_max
Если у вас нет доступа root:
echo 200000 | sudo dd of=/proc/sys/kernel/pid_max
Ответ 6
После увеличения размера кучи Xms
et Xmx
я должен был запустить мой Java в режиме 64 бит. В jmeter.bat
:
set JM_LAUNCH=java.exe -d64
Очевидно, что вам нужно запустить 64-разрядную ОС и установить 64-разрядные версии Java (см. https://www.java.com/en/download/manual.jsp)