LINUX.ORG.RU

Java ругается на нехватку памяти, хотя все есть

 , , ,


1

6

Запускаю jmeter с 1000 потоками (это довольно мало) в CLI режиме, listeners отключил, памяти дофига, xms и xmx прописаны с избытком (до 64 гб), что в логе и наблюдаю. Но все равно сыпет ошибками вида

Uncaught Exception java.lang.OutOfMemoryError: unable to create new native thread. See log file for details
В логах то же самое без намека на причину, лимит открытых файлов и процессов в limits.conf увеличил, не помогло. Где-то около 800 потоков жава добирает памяти до 3.6 Гб и заметно позже обычного вываливает несколько таких ошибок. Я уж подумал что случайно запустил в 32-бит, но нет
/proc/pid/exe: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=d1225326aa7a900443a38e8b3e27107fce1b3d81, stripped
Как так может быть? Процесс 64 бит, а ведет себя как 32 бит.

★★★★★

Последнее исправление: Lordwind (всего исправлений: 1)

Ответ на: комментарий от bvn13

Это я первым делом сделал в самом jmeter «${HEAP:=»-Xms16g -Xmx64g -XX:MaxMetaspaceSize=256m"}" В логе на запуске видно что доступно до 64.

Lordwind ★★★★★
() автор топика

xms и xmx — это про кучу, а тебе скорее стека не хватит, если ты по 1000 потоков стартуешь.

попробуй xss

morse ★★★★★
()

Скорее всего наступил на лимит числа потоков для пользователя, подними его в limits.conf.

maxcom ★★★★★
()
Ответ на: комментарий от iZEN
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-0ubuntu0.16.04.1-b11)
OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)
Lordwind ★★★★★
() автор топика

Смотри стек откуда вываливается, если возможно то сними дамп (и кол-во потоков) перед ошибкой.

Похоже, что у тебя там 100500 потоков (это или утечка, или кривая архитектура). А память не при чём.

Deleted
()

Если не x86/64- то вероятнее всего кривой pthread на архитектуре(особенно если собран clang-ом)

если x86/64 потыкай Оракловскую JRE

таки да больше всего похоже на какойто лимит железный/ядра/библиотек/пользовательыских прав(типа cgroup), а не самой джавы

missxu
()
Ответ на: комментарий от maxcom

Забыл прописал одновременно софт и хард лимиты. Дописал до 65000, не помогло.

Lordwind ★★★★★
() автор топика

Где-то около 800 потоков жава добирает памяти до 3.6 Гб и заметно позже обычного вываливает несколько таких ошибок. Я уж подумал что случайно запустил в 32-бит, но нет

file -L /proc/pid/exe

/proc/pid/exe: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=d1225326aa7a900443a38e8b3e27107fce1b3d81, stripped

Как так может быть? Процесс 64 бит, а ведет себя как 32 бит О_о

Lordwind ★★★★★
() автор топика
Ответ на: комментарий от iZEN

Со своей машины я проверить не смогу: Нагрузочное тестирование через VPN

Хотя по недавнему опыту jmeter у меня и 10к соединений держал, вроде на десктопной убунте. Сейчас доступна только амазоновская.

Lordwind ★★★★★
() автор топика

попробуй понизить xss, например если ты сделаешь -Xss256k, то треды будут занимать всего 800*256K=~200 мегабайт (скорей всего). Чем меньше значение, тем больше тредов можно создать, но начиная с какого-то числа приложухе настанет карачун

заметь что это будет память не в куче, а внешняя. То есть, если ты установишь xmx xms так, что они сожрут всю память, то на создание тредов не останется вообще ничего.

лимиты все задери в самый максимум (512к?) и погляди, что произойдет

stevejobs ★★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.