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 бит.

★★★★★

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

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

subwoofer ★★★★★ ()

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

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

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

missxu ()

Где-то около 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 ★★★☆☆ ()