Проблемы с JMeter при запуске большого количества потоков

Я тестирую с помощью Apache Jmeter, я просто получаю доступ к одной странице веб-сайта моей компании и увеличиваю количество пользователей, пока оно не достигнет порогового значения, проблема в том, что когда я получаю около 3000 потоков, JMeter не запускает все их. Если посмотреть на агрегированный график, то на нем работает всего около 2536 (это число варьируется, но всегда есть здесь).

Частичный прогон сопровождается следующим исключением в журналах:

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, но это, похоже, не помогло.


person Irony    schedule 30.01.2013    source источник


Ответы (6)


JVM просто не может запускать такое количество потоков. И даже если это так, JMeter будет потреблять много ресурсов ЦП только для переключения контекстов. Другими словами, выше некоторой точки вы тестируете не свое веб-приложение, а клиентский компьютер, на котором размещен JMeter.

У вас есть несколько вариантов:

  • поэкспериментируйте с параметрами JVM, например уменьшить значение по умолчанию -Xss512K до меньшего

  • запустить JMeter в кластере

  • использовать инструменты, основанные на совершенно ином подходе, например Gatling

person Tomasz Nurkiewicz    schedule 30.01.2013
comment
Вероятно, отрицательные голоса были вызваны тем, что вы утверждали, что JVM не может запускать много потоков, но обсуждение в ссылке, на которую вы ссылаетесь, похоже, противоречит этому утверждению. - person sworisbreathing; 03.04.2014
comment
вы тестируете не свое веб-приложение, а клиентский компьютер, на котором размещен JMeter - именно - person binithb; 05.09.2014

У меня была аналогичная проблема, и я увеличил размер кучи в jmeter.bat до 1024M, и это устранило проблему.

set HEAP=-Xms1024m -Xmx1024m
person Siva    schedule 24.04.2013

Для JVM, если вы читаете hprof, он дает вам несколько решений, среди которых:

  • переключиться на 64-битный jvm (> 6_u25)

  • с этим вы сможете выделить больше кучи (-Xmx), убедитесь, что у вас есть эта RAM

  • уменьшить Xss с помощью:

-Xss256k

Затем для JMeter следуйте лучшим практикам:

Наконец, убедитесь, что вы используете последнюю версию JMeter.

  • Желательно использовать ОС Linux

  • Настройте стек TCP, ограничения

Успех будет зависеть от мощности вашего компьютера (процессора и памяти) и вашего плана тестирования.

Если этого недостаточно (для 3000 потоков все должно быть в порядке), вам может потребоваться распределенное тестирование.

person UBIK LOAD PACK    schedule 30.01.2013
comment
Я также предлагаю запустить JMeter из Linux и настроить sysctl, ulimit. (максимальное количество обрабатываемых файлов, увеличение диапазона портов и т. д.) - person Dominik Antal; 18.09.2014

Увеличение размера кучи в jmeter.bat отлично работает, установите HEAP = -Xms1024m -Xmx1024m

ИЛИ вы можете сделать что-то вроде ниже, если используете jmeter.sh: JVM_ARGS = "- Xms512m -Xmx1024m" jmeter.sh и т. Д.

person swathy valluri    schedule 17.09.2014


После увеличения Xms и Xmx размера кучи мне пришлось заставить мою Java работать в 64-битном режиме. В jmeter.bat:

set JM_LAUNCH=java.exe -d64

Очевидно, вам необходимо запустить 64-разрядную ОС и установить 64-разрядную версию Java (см. https://www.java.com/en/download/manual.jsp)

person Franck    schedule 24.08.2017