настройка памяти кучи в jmeter для более чем одного одновременного выполнения скрипта

#jmeter #performance-testing #heap-memory

#jmeter #тестирование производительности #куча-память

Вопрос:

Ниже приведен мой сценарий.

У меня есть 2 тестовых сценария: — один может использовать от 5 ГБ до 15 ГБ памяти кучи, а другой сценарий может использовать от 5 ГБ до 12 ГБ.

Если у меня есть компьютер с памятью 32 ГБ,

Могу ли я назначить XMS 1GB XMX 22GB при выполнении первого скрипта (хотя моему скрипту требуется 15 ГБ), а для второго скрипта я могу назначить XMS 1GB и XMX 12GB

Поскольку сумма максимальных значений превышает 32 ГБ (общая память)

Во втором случае я назначаю так —>

для сценария 1: XMS 22 ГБ XMX 22 ГБ

для сценария 2: XMS 12 ГБ и XMX 12 ГБ

Сумма не более 34 ГБ.

Работает ли это случайно, как показано ниже —— >

Если для первого скрипта выделено 12 ГБ, заблокирована ли эта память для этого процесса / скрипта? и могу ли я не использовать неиспользуемую память для других процессов?

или

Если для первого скрипта выделено 12 ГБ, он использует столько, сколько ему требуется, и любой другой процесс может использовать оставшуюся память? ЕСЛИ это работает таким образом — мне не нужно специально назначать кучу для двух сценариев отдельно.

Ответ №1:

Если вы установите минимальную память кучи через Xms параметр, JVM зарезервирует эту память, и она будет недоступна для других процессов.

Если вы можете выделить больше кучи JVM, чем у вас есть общая физическая оперативная память, это означает, что ваша ОС перейдет на замену — использование жесткого диска для сброса страниц памяти, что увеличивает объем памяти вашего компьютера за счет скорости, поскольку операции с памятью выполняются быстро, а операции с дисками очень медленные.

Например, посмотрите на мой ноутбук, который имеет 8 ГБ общей физической оперативной памяти:

введите описание изображения здесь

Он имеет 8 ГБ физической памяти, из которых 1,2 ГБ свободны. Это означает, что я могу безопасно выделить 1 ГБ оперативной памяти для Java

Однако, когда я даю 8 ГБ Java как:

 java -Xms8G
  

он все еще работает

15 ГБ — все еще работает

и когда я пытаюсь выделить 20 ГБ, происходит сбой, потому что он не помещается в физическую виртуальную память.

Вы должны избегать подкачки, потому что это означает, что JMeter не сможет отправлять запросы достаточно быстро, даже если тестируемая система поддерживает это, поэтому обязательно измерьте, сколько у вас доступно физической оперативной памяти, и ваш тест не должен превышать это значение. Если вы не можете достичь этого на одной машине — вам придется перейти на распределенное тестирование

Кроме того, «одновременный» запуск 2 разных скриптов — это не то, что вам следует делать, потому что речь идет не только о памяти, одно ядро процессора может выполнять только одну команду за раз, другие команды ожидают в очереди и обслуживаются переключением контекста, что является дорогостоящей и медленной операцией.

И последнее, но не менее важное: выделение максимальной КУЧИ — не лучшая идея, потому что таким образом сборки мусора будут менее частыми, но будут длиться намного дольше, что приведет к выпадению пропускной способности, сохраняйте использование кучи от 30% до 80%, как в статье об оптимальном размере кучи

Комментарии:

1. Спасибо за ваш подробный ответ, Дмитрий. Из всего вашего ценного ответа одна строка сбивает меня с толку — «Также «одновременный» запуск 2 разных сценариев — это не то, что вы должны делать» —-> Если у меня есть 2 приложения для тестирования производительности, и если у меня есть только на машине с генератором нагрузки.?? вы предлагаете избегать этого и предлагаете провести perf-тест только для одного приложения из одного генератора нагрузки