我正在 Arch Linux(内核 4.3.3-2)上运行一个带有多个容器的 docker 服务器。自从我上次重新启动后,容器内的 docker 服务器和随机程序都崩溃了,并显示一条关于无法创建线程或(较少)fork 的消息。具体的错误信息因程序而异,但大多数似乎都提到了具体的错误Resource temporarily unavailable。有关一些示例错误消息,请参见本文末尾。
现在有很多人收到了这个错误信息,并且有很多人对他们做出了回应。真正令人沮丧的是,每个人似乎都在猜测如何解决问题,但似乎没有人指出如何确定存在问题的众多可能原因中的哪一个。
我收集了这 5 个可能的错误原因以及如何验证它们不存在于我的系统中:
/proc/sys/kernel/threads-max( source ) 中配置的线程数有系统范围的限制。在我的情况下,这设置为60613.ulimit -s( source )配置的。我的壳的极限曾经是8192,但我已经通过将增加其* soft stack 32768成/etc/security/limits.conf,因此它ulimit -s现在的回报32768。我也增加了它的码头工人,过程将LimitSTACK=33554432进入/etc/systemd/system/docker.service(源,和我核实,该限制适用通过查看/proc/<pid of docker>/limits,并通过运行ulimit -s一个泊坞窗容器内。ulimit -v. 在我的系统上,它设置为unlimited,并且我的 3 GB 内存中有 80% 是空闲的。ulimit -u。在这种情况下,线程算作进程(源)。在我的系统上,限制设置为30306 …我在本地网络中运行 Arch Linux 服务器。它运行着 avahi-daemon 来宣传一些服务(如打印服务器)。
现在我的服务器不再可用,这是第二次发生。经过一番调查,我发现它的 IPv4 地址已从网络接口中删除,日志中包含以下消息:
Feb 04 22:36:34 edeltraud avahi-daemon[389]: Withdrawing address record for 192.168.168.23 on enp0s25.
Feb 04 22:36:34 edeltraud avahi-daemon[389]: Leaving mDNS multicast group on interface enp0s25.IPv4 with address 192.168.168.23.
Feb 04 22:36:34 edeltraud avahi-daemon[389]: Interface enp0s25.IPv4 no longer relevant for mDNS.
Run Code Online (Sandbox Code Playgroud)
IP 地址由 DHCP 使用 systemd-networkd 配置。这是/etc/systemd/network/enp0s25.network:
[Match]
Name=enp0s25
[Network]
DHCP=ipv4
IPForward=ipv4
DNS=85.214.20.141
DNS=213.73.91.35
DNS=2001:470:20::2
[DHCP]
UseDNS=false
Run Code Online (Sandbox Code Playgroud)
这可能是什么原因?