Problém je způsoben TasksMax
atribut systemd. Byl představen v systemd 228 a využívá subsystém pid cgroups, který byl zaveden v linuxovém jádře 4.3. Limit úkolu 512
je tedy povoleno v systemd, pokud je spuštěno jádro 4.3 nebo novější. Tato funkce je zde oznámena a byla zavedena v tomto požadavku na stažení a tímto požadavkem na stažení byly nastaveny výchozí hodnoty. Po upgradu mého jádra na 4.3, systemctl status docker
zobrazí Tasks
řádek:
# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/etc/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2016-01-15 19:58:00 CET; 1min 52s ago
Docs: https://docs.docker.com
Main PID: 2770 (docker)
Tasks: 502 (limit: 512)
CGroup: /system.slice/docker.service
Nastavení TasksMax=infinity
v [Service]
sekce docker.service
řeší problém. docker.service
je obvykle v /usr/share/systemd/system
, ale lze jej také vložit/zkopírovat do /etc/systemd/system
aby nedošlo k jeho přepsání správcem balíčků.
Požadavek na stažení se zvyšuje o TasksMax
pro ukázkové soubory dockeru systemd a zpráva o chybě Arch Linuxu se snaží dosáhnout toho samého pro balíček. Na fóru Arch Linux a ve zprávě o chybě Arch Linuxu ohledně lxc probíhá další diskuse.
DefaultTasksMax
lze použít v [Manager]
sekce v /etc/systemd/system.conf
(nebo /etc/systemd/user.conf
pro uživatelem spouštěné služby) k ovládání výchozí hodnoty pro TasksMax
.
Systemd také uplatňuje limit pro programy spouštěné z přihlašovacího prostředí. Tyto výchozí hodnoty jsou 4096
na uživatele (bude zvýšeno na 12288
) a jsou nakonfigurovány jako UserTasksMax
v [Login]
sekce /etc/systemd/logind.conf
.
cdauthova odpověď je správná, ale je třeba přidat další detail.
Na mém systému Ubuntu 16.04 se systemd 229 a jádrem 4.3 byl standardně vynucován limit 512 pid na rozsahy relací, i když byl UserTasksMax nastaven na novou, zvýšenou výchozí hodnotu 12288. Jakýkoli rozsah uživatelské relace byl tedy omezen na 512 vláken.
Jediný způsob, jak odstranit limit, bylo nastavit DefaultTasksMax=unlimited
v /etc/systemd/system.conf
a systemctl daemon-reexec
(nebo restartujte).
Zda k tomu dochází, můžete zkontrolovat vydáním systemctl status
, výběrem rozsahu relace a cat /sys/fs/cgroup/pids/user.slice/user-${UID}.slice/session-FOO.scope/pids.max
.