error=11
почти наверняка является кодом ошибки EAGAIN
:
$ grep EAGAIN asm-generic/errno-base.h
#define EAGAIN 11 /* Try again */
Системный вызов clone(2)
документирует возвращение ошибки EAGAIN
:
EAGAIN Too many processes are already running.
fork(2)
документы системного вызова возвращают две EAGAIN
ошибки:
EAGAIN fork() cannot allocate sufficient memory to copy the
parent's page tables and allocate a task structure for
the child.
EAGAIN It was not possible to create a new process because
the caller's RLIMIT_NPROC resource limit was
encountered. To exceed this limit, the process must
have either the CAP_SYS_ADMIN or the CAP_SYS_RESOURCE
capability.
Если бы у вас действительно было так мало памяти, это почти наверняка показывалось бы в системных журналах.Проверьте вывод dmesg(1)
или /var/log/syslog
на наличие потенциальных сообщений о нехватке системной памяти.(Другие вещи могут сломаться. Это не кажется слишком правдоподобным.)
Гораздо более вероятно, что вы столкнетесь либо с лимитом на пользователя для процессов, либо с максимальным количеством процессов в масштабе всей системы.Возможно, один из ваших процессов не правильно пожинает зомби?Это было бы очень легко определить, проверив вывод ps(1)
с течением времени:
while true ; do ps auxw >> ~/processes ; sleep 10 ; done
(Возможно, проверяйте каждую минуту или десять минут, если на самом деле это займет несколько часов, прежде чем у вас возникнут проблемы.)
Если вы не пожинаете зомби, прочитайте о том, что вы должны сделать с ProcessBuilder, чтобы использовать waitpid(2)
, чтобы пожинать своих мертвых детей.
Если вы на законных основаниях выполняете больше процессов, чем позволяют ваши rlimitsвам нужно будет использовать ulimit
в ваших bash(1)
сценариях (если выполняется как root
) или установить более высокие ограничения в /etc/security/limits.conf
для свойства nproc
.
Если вы вместо этого запускаетев рамках общесистемных ограничений процесса может потребоваться записать большее значение в /proc/sys/kernel/pid_max
.См. proc(5)
для некоторых (коротких) деталей.