GNU/Linux >> Znalost Linux >  >> Linux

Vytváření vláken se nezdaří s „Prostředky dočasně nedostupné“ s jádrem 4.3

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 .


Linux
  1. Trasování jádra pomocí trace-cmd

  2. Analyzujte linuxové jádro pomocí ftrace

  3. Poprvé s Linuxem:30 instalačních příběhů

  1. Proč jsem si zamiloval Antergos Linux

  2. Vytváření logických svazků v Linuxu pomocí LVM

  3. Protokolovat pouze přenesené soubory pomocí Rsync?

  1. Blokování aktualizací jádra pomocí Dpkg?

  2. Jak opravit su Selhání UŽIVATELE Pomocí su:nelze vytvořit podřízený proces:Zdroj dočasně nedostupný Chyba v CloudLinux?

  3. Spusťte dva příkazy pomocí docker exec