Uncaught Exception java .lang.OutOfMemoryError: невозможно создать собственный поток Ошибка при выполнении jmeter внутри одного контейнера docker - PullRequest
0 голосов
/ 02 августа 2020

При выполнении теста apache -jmeter на одном контейнере docker я столкнулся с проблемой ниже.

[489.013s] [предупреждение] [os, thread] Не удалось запустить поток - pthread_create не удалось (EAGAIN) для атрибутов: stacksize: 1024k, guardsize: 0k, detached. Неперехваченное исключение java .lang.OutOfMemoryError: невозможно создать собственный поток: возможно, не хватает памяти или достигнуты ограничения процесса / ресурсов. См. Подробности в файле журнала.

Я не могу создать нагрузку, превышающую 2k параллелизма. Несмотря на то, что в распределенном режиме на одном и том же хосте docker я легко достигаю одновременности 5k пользователей. Кажется, что один контейнер docker не полностью использует ЦП и доступную ему память.

Ниже приведены конфигурации:

  • ОЗУ сервера - 90 ГБ
  • Нет CPU - 16
  • Ulimit контейнера (ulimit -n) - 1048576
  • Java - открыть jdk-14
  • аргументы JVM - -Xms80G -XMX80G

1 Ответ

0 голосов
/ 03 августа 2020

невозможно создать собственный поток

это означает, что вы не можете создать более 2000 потоков на уровне операционной системы , проверьте, что ulimit -u и ulimit -T команды производят, и если вы видите что-то около 2000 там - это параметр, который вам нужно винить.

Также ваше распределение кучи кажется мне слишком высоким для виртуальных пользователей 2000/5000, вам не нужно Выделите всю физическую оперативную память для JVM, вам необходимо настроить JVM.

Если заполнение кучи Java слишком велико, сборка мусора происходит часто. Если занятость низкая, сборка мусора происходит нечасто, но длится дольше ... Старайтесь поддерживать занятость памяти кучи Java от 40% до 70% от размера кучи Java ...

Дополнительная информация:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...