2016-10-31 3 views
1

Я пытаюсь запустить экземпляр искры Докера, и я часто получает это исключение брошенное:Начала java.lang.OutOfMemoryError бросил на меня при запуске искры внутри Докер

16/10/30 23:20:26 ERROR SparkUncaughtExceptionHandler: Uncaught exception in thread Thread[Executor task launch worker-1,5,main] 
java.lang.OutOfMemoryError: unable to create new native thread 

Я использую этот докер изображение https://github.com/sequenceiq/docker-spark.

Мои ulimits кажется, нормально внутри контейнера:

bash-4.1# ulimit -a 
core file size   (blocks, -c) unlimited 
data seg size   (kbytes, -d) unlimited 
scheduling priority    (-e) 0 
file size    (blocks, -f) unlimited 
pending signals     (-i) 29747 
max locked memory  (kbytes, -l) 64 
max memory size   (kbytes, -m) unlimited 
open files      (-n) 1048576 
pipe size   (512 bytes, -p) 8 
POSIX message queues  (bytes, -q) 819200 
real-time priority    (-r) 0 
stack size    (kbytes, -s) 8192 
cpu time    (seconds, -t) unlimited 
max user processes    (-u) 1048576 
virtual memory   (kbytes, -v) unlimited 
file locks      (-x) unlimited 

Они также хорошо выглядеть снаружи контейнера, на хосте:

[email protected] ~> ulimit -a 
core file size   (blocks, -c) unlimited 
data seg size   (kbytes, -d) unlimited 
scheduling priority    (-e) 0 
file size    (blocks, -f) unlimited 
pending signals     (-i) 29747 
max locked memory  (kbytes, -l) 64 
max memory size   (kbytes, -m) unlimited 
open files      (-n) 1024 
pipe size   (512 bytes, -p) 8 
POSIX message queues  (bytes, -q) 819200 
real-time priority    (-r) 0 
stack size    (kbytes, -s) 8192 
cpu time    (seconds, -t) unlimited 
max user processes    (-u) 29747 
virtual memory   (kbytes, -v) unlimited 
file locks      (-x) unlimited 

Мой Googling сказал мне, что Systemd может ограничить задачи и причины этот вопрос, но у меня установлен лимит моей задачи на бесконечность:

[email protected] ~> grep TasksMax /usr/lib/systemd/system/docker.service 
20:TasksMax=infinity 

[email protected] ~> systemctl status docker 
● docker.service - Docker Application Container Engine 
    Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) 
    Active: active (running) since Mon 2016-10-31 08:22:39 AWST; 3h 14min ago 
    Docs: http://docs.docker.com 
Main PID: 1107 (docker-current) 
    Tasks: 56 
    Memory: 34.9M 
     CPU: 30.292s 

Любые идеи? Мой код Spark просто читается из экземпляра Kafka (работает в отдельном контейнере Docker) и выполняет базовую карту/сокращение. Ничего особенного.

+0

Не могли бы вы разместить команды докеров, которые вы используете? –

ответ

0

Ошибка указывает, что вы не можете создать более собственный поток, потому что у вас недостаточно памяти. это не обязательно означает, что вы достигнете ulimits, но у вас недостаточно памяти для создания большего количества потоков.

Размер памяти для создания потока в JVM управляется флагом -XSS и по умолчанию 1024k, если я правильно помню. Если у вас нет рекурсивного вызова, вы можете попытаться уменьшить флаг XSS и сможете создавать больше потоков с тем же объемом доступной памяти. Если XSS слишком мал, вы будете сталкиваться с StackOverflowError

докер-искра изображение использовать Hadoop-Docker изображение, которое содержит HDFS и пряжи услуги Вы можете выделить слишком много памяти из вашего контейнера для вашего размера JVMs кучи (hdfs, нити), и, следовательно, недостаточно памяти для выделения нового потока.

Надеюсь, что это поможет

Смежные вопросы