GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Das Erstellen von Threads schlägt mit „Ressource vorübergehend nicht verfügbar“ mit 4.3-Kernel fehl

Das Problem wird durch TasksMax verursacht systemd-Attribut. Es wurde in systemd 228 eingeführt und nutzt das Cgroups-PID-Subsystem, das im Linux-Kernel 4.3 eingeführt wurde. Ein Aufgabenlimit von 512 ist also in systemd aktiviert, wenn Kernel 4.3 oder neuer läuft. Das Feature wird hier angekündigt und wurde in diesem Pull-Request eingeführt und die Standardwerte wurden durch diesen Pull-Request gesetzt. Nach dem Upgrade meines Kernels auf 4.3, systemctl status docker zeigt eine Tasks an Zeile:

# 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

Einstellung TasksMax=infinity im [Service] Abschnitt von docker.service behebt das Problem. docker.service ist normalerweise in /usr/share/systemd/system , kann aber auch in /etc/systemd/system eingefügt/kopiert werden um zu vermeiden, dass es vom Paketmanager überschrieben wird.

Eine Pull-Anforderung erhöht TasksMax für die docker-Beispiel-systemd-Dateien, und ein Arch-Linux-Fehlerbericht versucht, dasselbe für das Paket zu erreichen. Es gibt einige zusätzliche Diskussionen im Arch Linux Forum und in einem Arch Linux Fehlerbericht bezüglich lxc.

DefaultTasksMax kann im [Manager] verwendet werden Abschnitt in /etc/systemd/system.conf (oder /etc/systemd/user.conf für vom Benutzer ausgeführte Dienste), um den Standardwert für TasksMax zu steuern .

Systemd wendet auch ein Limit für Programme an, die von einer Login-Shell ausgeführt werden. Diese sind standardmäßig 4096 pro Benutzer (wird auf 12288 erhöht ) und sind als UserTasksMax konfiguriert im [Login] Abschnitt von /etc/systemd/logind.conf .


Die Antwort von cdauth ist richtig, aber es gibt noch ein weiteres Detail hinzuzufügen.

Auf meinem Ubuntu 16.04-System mit systemd 229 und einem 4.3-Kernel wurde standardmäßig ein 512-PID-Limit für Sitzungsbereiche erzwungen, selbst wenn UserTasksMax auf den neuen, erhöhten Standardwert von 12288 eingestellt war. Daher war jeder Benutzersitzungsbereich auf 512 Threads begrenzt.

Die einzige Möglichkeit, das Limit zu entfernen, war das Setzen von DefaultTasksMax=unlimited in /etc/systemd/system.conf und systemctl daemon-reexec (oder Neustart).

Sie können dies überprüfen, indem Sie systemctl status ausgeben , Auswählen eines Sitzungsbereichs und cat /sys/fs/cgroup/pids/user.slice/user-${UID}.slice/session-FOO.scope/pids.max .


Linux
  1. Kernel-Tracing mit trace-cmd

  2. Analysieren Sie den Linux-Kernel mit ftrace

  3. Zum ersten Mal mit Linux:30 Installationsgeschichten

  4. Warum ich mich in Antergos Linux verliebt habe

  5. Logische Volumes unter Linux mit LVM erstellen

Erstellen von Wortlisten mit Crunch unter Kali Linux

Podman-Tutorial – Erste Schritte mit Podman

Erstellen eines Linux-Windows-Hybridsystems mit Cygwin

So stellen Sie CouchDB als Cluster mit Docker bereit

Installieren Sie WordPress mit Docker auf Ubuntu 20.04

Was kann eine „Ressource vorübergehend nicht verfügbar“ beim Befehl sock send() verursachen