Dies passiert, wenn ich mich beim Container anmelde und nicht mit Strg-c beenden kann.
Mein System ist Ubuntu 12.04
, der Kernel ist 3.8.0-25-generic
.
Docker-Version:
root@wutq-docker:~# docker version
Client version: 0.10.0
Client API version: 1.10
Go version (client): go1.2.1
Git commit (client): dc9c28f
Server version: 0.10.0
Server API version: 1.10
Git commit (server): dc9c28f
Go version (server): go1.2.1
Last stable version: 0.10.0
Ich habe das Skript https://raw.githubusercontent.com/dotcloud/docker/master/contrib/check-config.sh verwendet , um zu ĂŒberprĂŒfen, und in Ordnung.
Ich habe mir das Syslog angesehen und diese Nachricht gefunden:
May 6 11:30:33 wutq-docker kernel: [62365.889369] unregister_netdevice: waiting for lo to become free. Usage count = 3
May 6 11:30:44 wutq-docker kernel: [62376.108277] unregister_netdevice: waiting for lo to become free. Usage count = 3
May 6 11:30:54 wutq-docker kernel: [62386.327156] unregister_netdevice: waiting for lo to become free. Usage count = 3
May 6 11:31:02 wutq-docker kernel: [62394.423920] INFO: task docker:1024 blocked for more than 120 seconds.
May 6 11:31:02 wutq-docker kernel: [62394.424175] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
May 6 11:31:02 wutq-docker kernel: [62394.424505] docker D 0000000000000001 0 1024 1 0x00000004
May 6 11:31:02 wutq-docker kernel: [62394.424511] ffff880077793cb0 0000000000000082 ffffffffffffff04 ffffffff816df509
May 6 11:31:02 wutq-docker kernel: [62394.424517] ffff880077793fd8 ffff880077793fd8 ffff880077793fd8 0000000000013f40
May 6 11:31:02 wutq-docker kernel: [62394.424521] ffff88007c461740 ffff880076b1dd00 000080d081f06880 ffffffff81cbbda0
May 6 11:31:02 wutq-docker kernel: [62394.424526] Call Trace:
May 6 11:31:02 wutq-docker kernel: [62394.424668] [<ffffffff816df509>] ? __slab_alloc+0x28a/0x2b2
May 6 11:31:02 wutq-docker kernel: [62394.424700] [<ffffffff816f1849>] schedule+0x29/0x70
May 6 11:31:02 wutq-docker kernel: [62394.424705] [<ffffffff816f1afe>] schedule_preempt_disabled+0xe/0x10
May 6 11:31:02 wutq-docker kernel: [62394.424710] [<ffffffff816f0777>] __mutex_lock_slowpath+0xd7/0x150
May 6 11:31:02 wutq-docker kernel: [62394.424715] [<ffffffff815dc809>] ? copy_net_ns+0x69/0x130
May 6 11:31:02 wutq-docker kernel: [62394.424719] [<ffffffff815dc0b1>] ? net_alloc_generic+0x21/0x30
May 6 11:31:02 wutq-docker kernel: [62394.424724] [<ffffffff816f038a>] mutex_lock+0x2a/0x50
May 6 11:31:02 wutq-docker kernel: [62394.424727] [<ffffffff815dc82c>] copy_net_ns+0x8c/0x130
May 6 11:31:02 wutq-docker kernel: [62394.424733] [<ffffffff81084851>] create_new_namespaces+0x101/0x1b0
May 6 11:31:02 wutq-docker kernel: [62394.424737] [<ffffffff81084a33>] copy_namespaces+0xa3/0xe0
May 6 11:31:02 wutq-docker kernel: [62394.424742] [<ffffffff81057a60>] ? dup_mm+0x140/0x240
May 6 11:31:02 wutq-docker kernel: [62394.424746] [<ffffffff81058294>] copy_process.part.22+0x6f4/0xe60
May 6 11:31:02 wutq-docker kernel: [62394.424752] [<ffffffff812da406>] ? security_file_alloc+0x16/0x20
May 6 11:31:02 wutq-docker kernel: [62394.424758] [<ffffffff8119d118>] ? get_empty_filp+0x88/0x180
May 6 11:31:02 wutq-docker kernel: [62394.424762] [<ffffffff81058a80>] copy_process+0x80/0x90
May 6 11:31:02 wutq-docker kernel: [62394.424766] [<ffffffff81058b7c>] do_fork+0x9c/0x230
May 6 11:31:02 wutq-docker kernel: [62394.424769] [<ffffffff816f277e>] ? _raw_spin_lock+0xe/0x20
May 6 11:31:02 wutq-docker kernel: [62394.424774] [<ffffffff811b9185>] ? __fd_install+0x55/0x70
May 6 11:31:02 wutq-docker kernel: [62394.424777] [<ffffffff81058d96>] sys_clone+0x16/0x20
May 6 11:31:02 wutq-docker kernel: [62394.424782] [<ffffffff816fb939>] stub_clone+0x69/0x90
May 6 11:31:02 wutq-docker kernel: [62394.424786] [<ffffffff816fb5dd>] ? system_call_fastpath+0x1a/0x1f
May 6 11:31:04 wutq-docker kernel: [62396.466223] unregister_netdevice: waiting for lo to become free. Usage count = 3
May 6 11:31:14 wutq-docker kernel: [62406.689132] unregister_netdevice: waiting for lo to become free. Usage count = 3
May 6 11:31:25 wutq-docker kernel: [62416.908036] unregister_netdevice: waiting for lo to become free. Usage count = 3
May 6 11:31:35 wutq-docker kernel: [62427.126927] unregister_netdevice: waiting for lo to become free. Usage count = 3
May 6 11:31:45 wutq-docker kernel: [62437.345860] unregister_netdevice: waiting for lo to become free. Usage count = 3
Nachdem dies passiert ist, öffne ich ein anderes Terminal und beende diesen Prozess und starte Docker neu, aber das wird aufgehÀngt.
Ich starte den Host neu und er zeigt beim Herunterfahren noch einige Minuten lang diese Meldungen an:
Ich sehe ein sehr Ă€hnliches Problem fĂŒr eth0. Ubuntu 12.04 auch.
Ich muss die Maschine aus- und wieder einschalten. Von /var/log/kern.log
:
May 22 19:26:08 box kernel: [596765.670275] device veth5070 entered promiscuous mode
May 22 19:26:08 box kernel: [596765.680630] IPv6: ADDRCONF(NETDEV_UP): veth5070: link is not ready
May 22 19:26:08 box kernel: [596765.700561] IPv6: ADDRCONF(NETDEV_CHANGE): veth5070: link becomes ready
May 22 19:26:08 box kernel: [596765.700628] docker0: port 7(veth5070) entered forwarding state
May 22 19:26:08 box kernel: [596765.700638] docker0: port 7(veth5070) entered forwarding state
May 22 19:26:19 box kernel: [596777.386084] [FW DBLOCK] IN=docker0 OUT= PHYSIN=veth5070 MAC=56:84:7a:fe:97:99:9e:df:a7:3f:23:42:08:00 SRC=172.17.0.8 DST=172.17.42.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=170 DF PROTO=TCP SPT=51615 DPT=13162 WINDOW=14600 RES=0x00 SYN URGP=0
May 22 19:26:21 box kernel: [596779.371993] [FW DBLOCK] IN=docker0 OUT= PHYSIN=veth5070 MAC=56:84:7a:fe:97:99:9e:df:a7:3f:23:42:08:00 SRC=172.17.0.8 DST=172.17.42.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=549 DF PROTO=TCP SPT=46878 DPT=12518 WINDOW=14600 RES=0x00 SYN URGP=0
May 22 19:26:23 box kernel: [596780.704031] docker0: port 7(veth5070) entered forwarding state
May 22 19:27:13 box kernel: [596831.359999] docker0: port 7(veth5070) entered disabled state
May 22 19:27:13 box kernel: [596831.361329] device veth5070 left promiscuous mode
May 22 19:27:13 box kernel: [596831.361333] docker0: port 7(veth5070) entered disabled state
May 22 19:27:24 box kernel: [596841.516039] unregister_netdevice: waiting for eth0 to become free. Usage count = 1
May 22 19:27:34 box kernel: [596851.756060] unregister_netdevice: waiting for eth0 to become free. Usage count = 1
May 22 19:27:44 box kernel: [596861.772101] unregister_netdevice: waiting for eth0 to become free. Usage count = 1
Hey, das passierte auch gerade bei mir.
Docker-Version:
Client version: 0.11.1
Client API version: 1.11
Go version (client): go1.2.1
Git commit (client): fb99f99
Server version: 0.11.1
Server API version: 1.11
Git commit (server): fb99f99
Go version (server): go1.2.1
Last stable version: 0.11.1
Kernel-Log : http://pastebin.com/TubCy1tG
Systemdetails :
AusfĂŒhren von Ubuntu 14.04 LTS mit gepatchtem Kernel (3.14.3-rt4). Aber um es mit dem standardmĂ€Ăigen Linux-3.13.0-27-generischen Kernel zu sehen. Das Komische ist jedoch, dass in diesem Fall alle meine Terminalfenster einfrieren, sodass ich höchstens ein paar Zeichen vorher eingeben kann. Das gleiche Schicksal ereilt auch alle neuen, die ich öffne - und am Ende muss ich meinen armen Laptop aus- und wieder einschalten, genau wie der gute Arzt oben. FĂŒrs Protokoll fĂŒhre ich Fischshell in urxvt oder xterm in xmonad aus. Ich habe nicht ĂŒberprĂŒft, ob es sich auf die einfache Bash auswirkt.
Dies könnte relevant sein:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1065434#yui_3_10_3_1_1401948176063_2050
Kopieren einer ziemlich groĂen Datenmenge ĂŒber das Netzwerk innerhalb eines Containers
und dann das Verlassen des Containers kann ein fehlendes Dekrement in der Per auslösen
CPU-ReferenzzÀhler auf einem NetzwerkgerÀt.
TatsÀchlich passierte dies bei mir unter anderem direkt nach apt-get
ting ein Paket mit einer Menge AbhÀngigkeiten.
Das Upgrade von Ubuntu 12.04.3 auf 14.04 hat dies fĂŒr mich ohne weitere Ănderungen behoben.
Ich erlebe dies auf RHEL7, 3.10.0-123.4.2.el7.x86_64
Ich habe festgestellt, dass das gleiche mit meinen virtuellen VirtualBox-Netzwerkschnittstellen passiert, wenn ich 3.14-rt4 verwende. Es soll in Vanilla 3.13 oder so behoben werden.
@egasimus Das gleiche hier - ich habe Hunderte von MB Daten
Ich habe auf Debian-Kernel 3.14 aktualisiert und das Problem scheint verschwunden zu sein. Anscheinend existierte das Problem in einigen Kerneln < 3.5, wurde in 3.5 behoben, in 3.6 regressiert und in etwas 3.12-3.14 gepatcht. https://bugzilla.redhat.com/show_bug.cgi?id=880394
@spiffytech Haben Sie eine Idee, wo ich dies bezĂŒglich des Echtzeit-Kernel-Aromas melden kann? Ich denke, sie veröffentlichen nur einen RT-Patch fĂŒr jede andere Version und wĂŒrden es wirklich hassen, wenn 3.16-rt mit diesem immer noch defekt herauskommt. :/
EDIT: Habe es bei
Ich bekomme dies auf Ubuntu 14.10 mit 3.18.1. Kernel-Log zeigt
Dec 21 22:49:31 inotmac kernel: [15225.866600] unregister_netdevice: waiting for lo to become free. Usage count = 2
Dec 21 22:49:40 inotmac kernel: [15235.179263] INFO: task docker:19599 blocked for more than 120 seconds.
Dec 21 22:49:40 inotmac kernel: [15235.179268] Tainted: G OE 3.18.1-031801-generic #201412170637
Dec 21 22:49:40 inotmac kernel: [15235.179269] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
Dec 21 22:49:40 inotmac kernel: [15235.179271] docker D 0000000000000001 0 19599 1 0x00000000
Dec 21 22:49:40 inotmac kernel: [15235.179275] ffff8802082abcc0 0000000000000086 ffff880235c3b700 00000000ffffffff
Dec 21 22:49:40 inotmac kernel: [15235.179277] ffff8802082abfd8 0000000000013640 ffff8800288f2300 0000000000013640
Dec 21 22:49:40 inotmac kernel: [15235.179280] ffff880232cf0000 ffff8801a467c600 ffffffff81f9d4b8 ffffffff81cd9c60
Dec 21 22:49:40 inotmac kernel: [15235.179282] Call Trace:
Dec 21 22:49:40 inotmac kernel: [15235.179289] [<ffffffff817af549>] schedule+0x29/0x70
Dec 21 22:49:40 inotmac kernel: [15235.179292] [<ffffffff817af88e>] schedule_preempt_disabled+0xe/0x10
Dec 21 22:49:40 inotmac kernel: [15235.179296] [<ffffffff817b1545>] __mutex_lock_slowpath+0x95/0x100
Dec 21 22:49:40 inotmac kernel: [15235.179299] [<ffffffff8168d5c9>] ? copy_net_ns+0x69/0x150
Dec 21 22:49:40 inotmac kernel: [15235.179302] [<ffffffff817b15d3>] mutex_lock+0x23/0x37
Dec 21 22:49:40 inotmac kernel: [15235.179305] [<ffffffff8168d5f8>] copy_net_ns+0x98/0x150
Dec 21 22:49:40 inotmac kernel: [15235.179308] [<ffffffff810941f1>] create_new_namespaces+0x101/0x1b0
Dec 21 22:49:40 inotmac kernel: [15235.179311] [<ffffffff8109432b>] copy_namespaces+0x8b/0xa0
Dec 21 22:49:40 inotmac kernel: [15235.179315] [<ffffffff81073458>] copy_process.part.28+0x828/0xed0
Dec 21 22:49:40 inotmac kernel: [15235.179318] [<ffffffff811f157f>] ? get_empty_filp+0xcf/0x1c0
Dec 21 22:49:40 inotmac kernel: [15235.179320] [<ffffffff81073b80>] copy_process+0x80/0x90
Dec 21 22:49:40 inotmac kernel: [15235.179323] [<ffffffff81073ca2>] do_fork+0x62/0x280
Dec 21 22:49:40 inotmac kernel: [15235.179326] [<ffffffff8120cfc0>] ? get_unused_fd_flags+0x30/0x40
Dec 21 22:49:40 inotmac kernel: [15235.179329] [<ffffffff8120d028>] ? __fd_install+0x58/0x70
Dec 21 22:49:40 inotmac kernel: [15235.179331] [<ffffffff81073f46>] SyS_clone+0x16/0x20
Dec 21 22:49:40 inotmac kernel: [15235.179334] [<ffffffff817b3ab9>] stub_clone+0x69/0x90
Dec 21 22:49:40 inotmac kernel: [15235.179336] [<ffffffff817b376d>] ? system_call_fastpath+0x16/0x1b
Dec 21 22:49:41 inotmac kernel: [15235.950976] unregister_netdevice: waiting for lo to become free. Usage count = 2
Dec 21 22:49:51 inotmac kernel: [15246.059346] unregister_netdevice: waiting for lo to become free. Usage count = 2
Ich werde docker version/info
senden, sobald das System nicht mehr eingefroren ist :)
Wir sehen dieses Problem auch. Ubuntu 14.04, 3.13.0-37-generisch
Auf dem Ubuntu 14.04-Server hat mein Team festgestellt, dass ein Downgrade von 3.13.0-40-generic auf 3.13.0-32-generic das Problem "behebt". Angesichts der Beobachtung von @sbward wĂŒrde dies die Regression nach 3.13.0-32-generic und vor (oder einschlieĂlich) 3.13.0-37-generic setzen.
Ich fĂŒge hinzu, dass wir in unserem Fall manchmal eine _negative_ NutzungszĂ€hlung sehen.
FWIW haben wir diesen Fehler beim AusfĂŒhren von lxc auf einem vertrauenswĂŒrdigen Kernel (3.13.0-40-generic #69-Ubuntu) festgestellt. Die Meldung erscheint in dmesg gefolgt von diesem Stacktrace:
[27211131.602869] INFO: task lxc-start:26342 blocked for more than 120 seconds.
[27211131.602874] Not tainted 3.13.0-40-generic #69-Ubuntu
[27211131.602877] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[27211131.602881] lxc-start D 0000000000000001 0 26342 1 0x00000080
[27211131.602883] ffff88000d001d40 0000000000000282 ffff88001aa21800 ffff88000d001fd8
[27211131.602886] 0000000000014480 0000000000014480 ffff88001aa21800 ffffffff81cdb760
[27211131.602888] ffffffff81cdb764 ffff88001aa21800 00000000ffffffff ffffffff81cdb768
[27211131.602891] Call Trace:
[27211131.602894] [<ffffffff81723b69>] schedule_preempt_disabled+0x29/0x70
[27211131.602897] [<ffffffff817259d5>] __mutex_lock_slowpath+0x135/0x1b0
[27211131.602900] [<ffffffff811a2679>] ? __kmalloc+0x1e9/0x230
[27211131.602903] [<ffffffff81725a6f>] mutex_lock+0x1f/0x2f
[27211131.602905] [<ffffffff8161c2c1>] copy_net_ns+0x71/0x130
[27211131.602908] [<ffffffff8108f889>] create_new_namespaces+0xf9/0x180
[27211131.602910] [<ffffffff8108f983>] copy_namespaces+0x73/0xa0
[27211131.602912] [<ffffffff81065b16>] copy_process.part.26+0x9a6/0x16b0
[27211131.602915] [<ffffffff810669f5>] do_fork+0xd5/0x340
[27211131.602917] [<ffffffff810c8e8d>] ? call_rcu_sched+0x1d/0x20
[27211131.602919] [<ffffffff81066ce6>] SyS_clone+0x16/0x20
[27211131.602921] [<ffffffff81730089>] stub_clone+0x69/0x90
[27211131.602923] [<ffffffff8172fd2d>] ? system_call_fastpath+0x1a/0x1f
Bin auf Ubuntu 14.04 und Debian Jessie mit Kernel 3.16.x darauf gestoĂen.
Docker-Befehl:
docker run -t -i -v /data/sitespeed.io:/sitespeed.io/results company/dockerfiles:sitespeed.io-latest --name "Superbrowse"
Das scheint ein ziemlich schlimmes Problem zu sein...
@jbalonso auch mit 3.13.0-32-generic bekomme ich den Fehler nach nur wenigen erfolgreichen DurchlÀufen :sob:
@MrMMorris könnten Sie ein Reproduktionsskript mit öffentlich verfĂŒgbaren Bildern teilen?
Jeder, der diesen Fehler auf seinem System sieht, fĂŒhrt ein Paket des Linux-Kernels auf seiner Distribution aus, das viel zu alt ist und dem die Fixes fĂŒr dieses spezielle Problem fehlen.
Wenn dieses Problem auftritt, stellen Sie sicher, dass Sie apt-get update && apt-get dist-upgrade -y
ausfĂŒhren und Ihr System neu starten. Wenn Sie auf Digital Ocean sind, mĂŒssen Sie auch die Kernel-Version auswĂ€hlen, die gerade wĂ€hrend des Updates installiert wurde, da sie nicht automatisch den neuesten Kernel verwenden (siehe https://digitalocean.uservoice.com/forums/136585-digitalocean /suggestions/2814988-give-option-to-use-the-droplet-s-own-bootloader).
CentOS/RHEL/Fedora/Scientific Linux-Benutzer mĂŒssen ihre Systeme mit yum update
neuesten Stand halten und nach der Installation der Updates neu starten.
Wenn Sie dieses Problem melden, stellen Sie bitte sicher, dass Ihr System vollstÀndig gepatcht und mit den neuesten stabilen Updates (keine manuell installierten Experimental-/Test-/Alpha-/Beta-/RC-Pakete) vom Lieferanten Ihrer Distribution auf dem neuesten Stand ist.
@unclejack
Ich lief apt-get update && apt-get dist-upgrade -y
ubuntu 14.04 3.13.0-46-generisch
Bekomme den Fehler immer noch nach nur einem docker run
Ich kann bei Bedarf ein AMI zum Reproduzieren erstellen
@MrMMorris Vielen Dank, dass Sie bestÀtigt haben, dass es immer noch ein Problem mit dem neuesten
Alles, was ich tun kann, um zu helfen, lass es mich wissen! :LĂ€cheln:
@MrMMorris Wenn Sie einen Reproduzierer bereitstellen können, ist ein Fehler fĂŒr Ubuntu geöffnet und wird sehr geschĂ€tzt: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1403152
@rsampaio wenn ich heute Zeit habe, werde ich das auf jeden Fall fĂŒr dich besorgen!
Dieses Problem tritt auch unter 3.16(.7) auf Debian 7 und Debian 8 auf: https://github.com/docker/docker/issues/9605#issuecomment -85025729. Ein Neustart des Servers ist derzeit die einzige Möglichkeit, dies zu beheben.
Dieses Problem wird bei RHEL 6.6 mit Kernel 2.6.32-504.8.1.el6.x86_64 beim Starten einiger Docker-Container (nicht aller Container) angezeigt.
_ kernel:unregister_netdevice : Warten darauf, dass lo frei wird. Nutzungsanzahl = -1_
Auch hier scheint ein Neustart des Servers derzeit die einzige Lösung zu sein
Sehen Sie dies auch auf CoreOS (647.0.0) mit Kernel 3.19.3.
Neustart ist auch die einzige Lösung, die ich gefunden habe.
Getestet Debian Jessie mit dem Kernel von sid (4.0.2) - das Problem bleibt.
Kennt jemand dieses Problem bei der AusfĂŒhrung von Nicht-Ubuntu-Containern?
Jawohl. Debians.
19. Mai 2015 Đł. 19:01 ĐŸĐ»ŃĐ·ĐŸĐČĐ°ŃĐ”Đ»Ń "popsikle" [email protected]
ĐœĐ°ĐżĐžŃĐ°Đ»:
Kennt jemand dieses Problem bei der AusfĂŒhrung von Nicht-Ubuntu-Containern?
â
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/docker/docker/issues/5618#issuecomment -113556862.
Dies ist ein Kernelproblem, kein Bildproblem. Das Wechseln eines Bildes gegen ein anderes wird dieses Problem nicht verbessern oder verschlimmern.
Probleme mit Debian Jessie auf einem BeagleBone Black mit 4.1.2-Bone12-Kernel
Erfahrung nach dem Wechsel von 4.1.2 auf 4.2-rc2 (mit Git-Build von 1.8.0).
Das Löschen von /var/lib/docker/* löst das Problem nicht.
Ein ZurĂŒckschalten auf 4.1.2 behebt das Problem.
AuĂerdem hat VirtualBox das gleiche Problem und es gibt einen Patch fĂŒr v5.0.0 (retro-portiert auf v4), der angeblich etwas im Kerneltreiberteil tut. Es lohnt sich, das Problem zu verstehen.
Dies ist der Fix in der VirtualBox: https://www.virtualbox.org/attachment/ticket/12264/diff_unregister_netdev
Sie modifizieren nicht wirklich den Kernel, sondern nur ihr Kernel-Modul.
Habe auch dieses Problem mit 4.2-rc2:
unregister_netdevice: warten, bis vethf1738d3 frei wird. Nutzungsanzahl = 1
Gerade 4.2-RC3 kompiliert, scheint wieder zu funktionieren
@nazar-pc Danke fĂŒr die Info. Habe es gerade mit 4.1.3 getroffen, war ziemlich sauer
@techniq das gleiche hier, ziemlich schlimmer Kernel-Bug. Ich frage mich, ob wir melden sollten, dass es auf den Baum 4.1 zurĂŒckportiert wird.
Linux docker13 3.19.0-22-generic #22-Ubuntu SMP Di 16. Juni 17:15:15 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Kernel von Ubuntu 15.04, gleiches Problem
Ich habe es auch mit 4.2-rc3 gesehen. Es gibt keinen einzigen Fehler bezĂŒglich GerĂ€telecks :) Ich kann auf jedem Kernel >=4.1 unter hoher Last reproduzieren.
Dieses Problem hatte ich auch gerade. Ubuntu 3.13.0-57-generic, bereitgestellt ĂŒber Tutum. Leider fĂŒllt es kern.log und syslog und bringt die Maschine zum Absturz. Es passiert auf der Datenbankmaschine (dockerisierte Postgres), also bringt es das gesamte System zum Erliegen...
Ich schlieĂe mich dem Chor von "me too" an und sehe dieses Problem auf einer Cloudstack-VM, auf der RancherOS (ein minimales Betriebssystem) 0.3.3 ausgefĂŒhrt wird, wĂ€hrend Docker-Images aus einem lokalen privaten Docker-Repository gezogen werden. Es passiert alle zehn Sekunden, ich bin mir nicht sicher, ob das etwas bedeutet oder nicht.
Habe auch dieses Problem mit 4.2-rc7
Gibt es Neuigkeiten dazu, welchen Kernel sollen wir verwenden? Es passiert auch mit einem vollstÀndig aktuellen Kernel (3.19.0-26 auf Ubuntu 14.04)
Dieses Problem haben wir auch. Dies geschieht, nachdem wir userland-proxy=false konfiguriert haben. Wir verwenden einige Monitor-Skripte, die alle 1 Minute einen neuen Docker-Container erzeugen, um den Befehl Nagios-Plugins auszufĂŒhren. Was ich im Prozessbaum sehe, ist, dass er beim Befehl docker rm hĂ€ngen bleibt und viele Fehler in der Datei kern.log sehen
Sep 24 03:53:13 prod-service-05 kernel: [ 1920.544106] unregister_netdevice: waiting for lo to become free. Usage count = 2
Sep 24 03:53:13 prod-service-05 kernel: [ 1921.008076] unregister_netdevice: waiting for vethb6bf4db to become free. Usage count = 1
Sep 24 03:53:23 prod-service-05 kernel: [ 1930.676078] unregister_netdevice: waiting for lo to become free. Usage count = 2
Sep 24 03:53:23 prod-service-05 kernel: [ 1931.140074] unregister_netdevice: waiting for vethb6bf4db to become free. Usage count = 1
Sep 24 03:53:33 prod-service-05 kernel: [ 1940.820078] unregister_netdevice: waiting for lo to become free. Usage count = 2
Das sind unsere Systeminformationen
ubuntu@prod-service-02:~$ docker version
Client:
Version: 1.8.2
API version: 1.20
Go version: go1.4.2
Git commit: 0a8c2e3
Built: Thu Sep 10 19:19:00 UTC 2015
OS/Arch: linux/amd64
Server:
Version: 1.8.2
API version: 1.20
Go version: go1.4.2
Git commit: 0a8c2e3
Built: Thu Sep 10 19:19:00 UTC 2015
OS/Arch: linux/amd64
ubuntu@prod-service-02:~$ docker info
Containers: 2
Images: 52
Storage Driver: overlay
Backing Filesystem: extfs
Execution Driver: native-0.2
Logging Driver: gelf
Kernel Version: 4.0.9-040009-generic
Operating System: Ubuntu 14.04.3 LTS
CPUs: 4
Total Memory: 7.304 GiB
Name: prod-service-02
ID: NOIK:LVBV:HFB4:GZ2Y:Q74F:Q4WW:ZE22:MDE7:7EBW:XS42:ZK4G:XNTB
WARNING: No swap limit support
Labels:
provider=generic
Update: Obwohl https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1403152 sagte, es sei bereits am 17.08.2015 behoben. Also habe ich es mit dem Kernel v3.19.8-ckt6-vivid versucht, der am 02.09.2015 erstellt wurde, oder sogar v4.2.1-unstable, der am 21.09.2015 erstellt wurde, und habe immer noch ein Problem.
Ich habe das Problem gerade erneut mit 3.19.0-28-generic
, daher ist der neueste Ubuntu-Kernel nicht sicher
Yup, es scheint, als ob --userland-proxy=false
mit Àlteren Kerneln jetzt nicht die beste Option ist :(
Nein. Ich habe --userland-proxy=false fĂŒr alle 3.19, 4.0, 4.2 Kernelversionen ausprobiert und das Problem tritt immer noch auf.
Ich verwende den Userland-Proxy ohne iptables (--iptables=false) und sehe dies mindestens einmal pro Tag. Leider war die einzige Problemumgehung ein Watchdog, der den Server mit der SysRq-Technik hart zurĂŒcksetzte.
Meine Systeme fĂŒhren einige Container aus, die schwere Standard- / Fehlerschreiber sind, da andere berichteten, dass dies den Fehler auslösen könnte.
``````
$ Docker-Info
BehÀlter: 15
Bilder: 148
Speichertreiber: aufs
Root-Verzeichnis: /var/lib/docker/aufs
Backup-Dateisystem: extfs
Dirs: 178
Dirperm1 unterstĂŒtzt: true
AusfĂŒhrungstreiber: native-0.2
Protokollierungstreiber: json-Datei
Kernel-Version: 3.19.0-26-generic
Betriebssystem: Ubuntu 14.04.3 LTS
CPUs: 12
Gesamtspeicher: 62,89 GiB
Name: * *
ID: 2 ALJ:YTUH : QCNX:FPEO :YBG4:ZTL4:2 EYK:AV7D :FN7C: IVNU:UWBL :YYZ5
$ Docker-Version
Client-Version: 1.7.0
Client-API-Version: 1.19
Go-Version (Client): go1.4.2
Git-Commit (Client): 0baf609
Betriebssystem/Arch (Client): linux/amd64
Serverversion: 1.7.0
Server-API-Version: 1.19
Go-Version (Server): go1.4.2
Git-Commit (Server): 0baf609
Betriebssystem/Arch (Server): linux/amd64```
``````
Leider bin ich im gleichen Fall, heute ist ein Produktionsserver dreimal aufgrund dieses Fehlers ausgefallen, und die einzige Möglichkeit, dies zu beheben, besteht darin, einige magische SysRq-Befehle zu verwenden.
stoĂen
Ich sehe dies immer noch auf dem neuesten Debian-Jessie mit Kernel 4.2.0
Selbes Problem hier. Plötzlich fielen drei meiner aws-Server aus und die Protokolle riefen "unregister_netdevice: wait for lo to free. Usage count = 1"
Ubuntu: 14.04
Kernel-Version: 3.13.0-63-generic
Docker: 1.7.1
Syslog
Gibt es eine sichere Kernel-Version?
Problem tritt auch mit Kernel 4.2 von Ubuntu 15.10 auf
passiert in coreos:
Bilder: 1174
Speichertreiber: Overlay
Backup-Dateisystem: extfs
AusfĂŒhrungstreiber: native-0.2
Protokollierungstreiber: json-Datei
Kernel-Version: 4.1.7-coreos
Betriebssystem: CoreOS 766.4.0
Der Kernel-Bug, den @killme2008 letztes Mal gesagt hat
Sie sollten es wahrscheinlich mit diesem Patch versuchen, der auf Ihrem Kernel angewendet wird http://www.spinics.net/lists/netdev/msg351337.html
Paket: Racebedingung in packet_bind
oder warte auf den Backport im -stable-Baum; es wird frĂŒher oder spĂ€ter kommen.
:+1: Tolle Neuigkeiten!
Hallo zusammen, gute Nachrichten!
Seit meinem letzten Kommentar hier (zum Zeitpunkt des Schreibens vor 17 Tagen) habe ich diese Fehler nicht mehr bekommen. Auf meinen Servern (ungefÀhr 30) liefen Ubuntu 14.04 mit einigen veralteten Paketen.
Nach einem kompletten System-Upgrade inklusive Docker-Engine (von 1.7.1 auf 1.8.3) + Kernel-Upgrade auf die neuste mögliche Version im Repo von Ubuntu laufen meine Server ohne Vorkommnisse.
:8 Ball:
Ist heute auch auf 3 unserer AWS-Instanzen passiert:
Client:
Version: 1.8.2
API version: 1.20
Go version: go1.4.2
Git commit: 0a8c2e3
Built: Thu Sep 10 19:19:00 UTC 2015
OS/Arch: linux/amd64
Server:
Version: 1.8.2
API version: 1.20
Go version: go1.4.2
Git commit: 0a8c2e3
Built: Thu Sep 10 19:19:00 UTC 2015
OS/Arch: linux/amd64
Containers: 45
Images: 423
Storage Driver: devicemapper
Pool Name: docker-202:1-527948-pool
Pool Blocksize: 65.54 kB
Backing Filesystem: extfs
Data file: /dev/loop0
Metadata file: /dev/loop1
Data Space Used: 22.79 GB
Data Space Total: 107.4 GB
Data Space Available: 84.58 GB
Metadata Space Used: 35.58 MB
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.112 GB
Udev Sync Supported: true
Deferred Removal Enabled: false
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Library Version: 1.02.77 (2012-10-15)
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.13.0-49-generic
Operating System: Ubuntu 14.04.2 LTS
CPUs: 8
Total Memory: 60 GiB
Name: ip-10-0-1-36
ID: HEZG:TBTM:V4LN:IU7U:P55N:HNVH:XXOP:RMUX:JNWH:DSJP:3OA4:MGO5
WARNING: No swap limit support
Ich habe das gleiche Problem mit Ubuntu 14.04, allen Paketen auf dem neuesten Stand und dem neuesten linux-generic-lts-vivid
Kernel:
$ docker version
Client:
Version: 1.9.0
API version: 1.21
Go version: go1.4.2
Git commit: 76d6bc9
Built: Tue Nov 3 17:43:42 UTC 2015
OS/Arch: linux/amd64
Server:
Version: 1.9.0
API version: 1.21
Go version: go1.4.2
Git commit: 76d6bc9
Built: Tue Nov 3 17:43:42 UTC 2015
OS/Arch: linux/amd64
$ docker info
Containers: 14
Images: 123
Server Version: 1.9.0
Storage Driver: aufs
Root Dir: /mnt/docker-images/aufs
Backing Filesystem: extfs
Dirs: 151
Dirperm1 Supported: true
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.19.0-32-generic
Operating System: Ubuntu 14.04.3 LTS
CPUs: 8
Total Memory: 29.45 GiB
Name: ip-172-31-35-202
ID: 3B7E:5DJL:S4IB:KUCL:6UKN:64OF:WCLO:JKGK:4OI2:I2R6:63EY:WATN
WARNING: No swap limit support
Ich hatte es auch mit dem neuesten linux-image-generic
(3.13.0-67-generic).
Habe die gleichen Probleme hier auf rancherOS.
Passiert immer noch auf Fedora 22 (aktualisiert)....
Ich kann die Nachrichten loswerden, wenn ich Docker neu starte
systemctl docker neu starten
... die Meldung erscheint noch einmal ca. 3-4 mal und stoppt dann
Der gleiche Fehler tritt mir bei Coreos auf:
Coreos-Version:
core@core-1-94 ~ $ cat /etc/os-release NAME=CoreOS ID=coreos VERSION=766.5.0 VERSION_ID=766.5.0 BUILD_ID= PRETTY_NAME="CoreOS 766.5.0" ANSI_COLOR="1;32" HOME_URL="https://coreos.com/" BUG_REPORT_URL="https://github.com/coreos/bugs/issues"
Docker-Version:
core@core-1-94 ~ $ Docker-Version Client-Version: 1.7.1 Client-API-Version: 1.19 Go-Version (Client): go1.4.2 Git-Commit (Client): df2f73d-dirty Betriebssystem/Arch (Client): linux/amd64 Serverversion: 1.7.1 Server-API-Version: 1.19 Go-Version (Server): go1.4.2 Git-Commit (Server): df2f73d-dirty Betriebssystem/Arch (Server): linux/amd64
core@core-1-94 ~ $ uname -a Linux core-1-94 4.1.7-coreos-r1 #2 SMP Do 5. Nov 02:10:23 UTC 2015 x86_64 Intel(R) Xeon(R) CPU E5-2660 v3 @ 2,60GHz GenuineIntel GNU/Linux
Systemprotokoll:
07. Dez. 16:26:54 core-1-94 kernel: unregister_netdevice: wartet darauf, dass veth775ea53 frei wird. Nutzungsanzahl = 1 07. Dez 16:26:54 core-1-94 kernel: unregister_netdevice: warte darauf, dass lo frei wird. Nutzungsanzahl = 2 07. Dez. 16:26:55 core-1-94 sdnotify-proxy[1203]: I1207 08:26:55.930559 00001 vxlan.go:340] Nicht verpassen: 4e:5c:47:2f:9a:85, 10.244 .97.10 07. Dez 16:26:59 core-1-94 dockerd[1269]: time="2015-12-07T16:26:59.448438648+08:00" level=info msg="GET /version" 07. Dez. 16:27:01 core-1-94 sdnotify-proxy[1203]: I1207 08:27:01.050588 00001 vxlan.go:340] Ignorieren kein Miss: 5a:b1:f7:e9:7d:d0, 10.244 .34.8 07. Dez 16:27:02 core-1-94 dockerd[1269]: time="2015-12-07T16:27:02.398020120+08:00" level=info msg="GET /version" 07. Dez 16:27:02 core-1-94 dockerd[1269]: time="2015-12-07T16:27:02.398316249+08:00" level=info msg="GET /version" 07. Dez 16:27:04 core-1-94 dockerd[1269]: time="2015-12-07T16:27:04.449317389+08:00" level=info msg="GET /version" 07. Dez. 16:27:04 core-1-94 kernel: unregister_netdevice: wartet darauf, dass veth775ea53 frei wird. Nutzungsanzahl = 1 07. Dez 16:27:04 core-1-94 kernel: unregister_netdevice: warte darauf, dass lo frei wird. Nutzungsanzahl = 2 07. Dez. 16:27:06 core-1-94 sdnotify-proxy[1203]: I1207 08:27:06.106573 00001 vxlan.go:340] Ignorieren keinen Fehler: a6:38:ac:79:93:f5, 10.244 .47.24 07. Dez 16:27:09 core-1-94 dockerd[1269]: time="2015-12-07T16:27:09.449944048+08:00" level=info msg="GET /version" 07. Dez 16:27:11 core-1-94 sdnotify-proxy[1203]: I1207 08:27:11.162578 00001 vxlan.go:340] Ignorieren kein Miss: 0e:f0:6f:f4:69:57, 10.244 .71.24 07. Dez. 16:27:12 core-1-94 dockerd[1269]: time="2015-12-07T16:27:12.502991197+08:00" level=info msg="GET /version" 07. Dez 16:27:12 core-1-94 dockerd[1269]: time="2015-12-07T16:27:12.503411160+08:00" level=info msg="GET /version" 07. Dez 16:27:14 core-1-94 dockerd[1269]: time="2015-12-07T16:27:14.450646841+08:00" level=info msg="GET /version" 07. Dez. 16:27:14 core-1-94 kernel: unregister_netdevice: wartet darauf, dass veth775ea53 frei wird. Nutzungsanzahl = 1 07. Dez 16:27:14 core-1-94 kernel: unregister_netdevice: warte darauf, dass lo frei wird. Nutzungsanzahl = 2 07. Dez. 16:27:16 core-1-94 sdnotify-proxy[1203]: I1207 08:27:16.282556 00001 vxlan.go:340] Nicht verpassen: a6:62:77:31:ef:68, 10.244 .13.6 07. Dez 16:27:19 core-1-94 dockerd[1269]: time="2015-12-07T16:27:19.451486277+08:00" level=info msg="GET /version" 07. Dez 16:27:21 core-1-94 sdnotify-proxy[1203]: I1207 08:27:21.402559 00001 vxlan.go:340] Ignorieren kein Miss: 92:c4:66:52:cd:bb, 10.244 0,24,7 07. Dez 16:27:22 core-1-94 dockerd[1269]: time="2015-12-07T16:27:22.575446889+08:00" level=info msg="GET /version" 07. Dez 16:27:22 core-1-94 dockerd[1269]: time="2015-12-07T16:27:22.575838302+08:00" level=info msg="GET /version" 07. Dez 16:27:24 core-1-94 dockerd[1269]: time="2015-12-07T16:27:24.452320364+08:00" level=info msg="GET /version" 07. Dez. 16:27:24 core-1-94 kernel: unregister_netdevice: wartet darauf, dass veth775ea53 frei wird. Nutzungsanzahl = 1 07. Dez 16:27:24 core-1-94 kernel: unregister_netdevice: warte darauf, dass lo frei wird. Nutzungsanzahl = 2 07. Dez 16:27:26 core-1-94 sdnotify-proxy[1203]: I1207 08:27:26.394569 00001 vxlan.go:340] Ignorieren kein Miss: 6a:f7:bf:ec:03:50, 10.244 .87.8 07. Dez 16:27:29 core-1-94 dockerd[1269]: time="2015-12-07T16:27:29.453171649+08:00" level=info msg="GET /version" 07. Dez. 16:27:29 core-1-94 systemd[1]: Generieren von /run/coreos/motd wird gestartet... 07. Dez. 16:27:29 core-1-94 systemd[1]: Gestartet Generieren /run/coreos/motd. 07. Dez 16:27:32 core-1-94 dockerd[1269]: time="2015-12-07T16:27:32.671592437+08:00" level=info msg="GET /version" 07. Dez. 16:27:32 core-1-94 dockerd[1269]: time="2015-12-07T16:27:32.671841436+08:00" level=info msg="GET /version" 07. Dez 16:27:33 core-1-94 sdnotify-proxy[1203]: I1207 08:27:33.562534 00001 vxlan.go:340] Ignorieren kein Miss: 22:b4:62:d6:25:b9, 10.244 .68,8 07. Dez 16:27:34 core-1-94 dockerd[1269]: time="2015-12-07T16:27:34.453953162+08:00" level=info msg="GET /version" 07. Dez. 16:27:34 core-1-94 kernel: unregister_netdevice: wartet darauf, dass veth775ea53 frei wird. Nutzungsanzahl = 1 07. Dez 16:27:35 core-1-94 kernel: unregister_netdevice: warte darauf, dass lo frei wird. Nutzungsanzahl = 2
Alles Gute zum Geburtstag, verdammtes Problem =)
6. Mai 2014
Das selbe hier. Nur Neustart. Neueste Docker-Version. Ubuntu 14.04.
@samvignoli dies wurde als Kernel-Problem identifiziert, also leider nicht etwas, das in Docker behoben werden kann
@thaJeztah Hast du einen Link zum Bugtracker fĂŒr das
Oder vielleicht ein Hinweis darauf, welche Kernel betroffen sind?
Wir möchten, dass dies in unserer Umgebung gelöst wird.
@Rucknar Entschuldigung, tue ich nicht (vielleicht gibt es einen in dieser Diskussion, ich habe nicht alle Kommentare zurĂŒckgelesen)
Linux atlas2 3.19.0-33-generic #38~14.04.1-Ubuntu SMP Fr 6. November 18:17:28 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
@Rucknar, wenn Sie ein wenig nach oben scrollen, sehen Sie den Link zum Patch http://www.spinics.net/lists/netdev/msg351337.html. Es ist jetzt in Linux-Master, ich denke, es wird auf Linux 4.4 gehen, vielleicht hat es jemand bereits auf frĂŒhere Versionen zurĂŒckportiert, aber nicht sicher.
Vielen Dank an alle, werde prĂŒfen, was beim Upgrade erforderlich ist.
FWIW Ich habe den letzten hier erwĂ€hnten Patch auf Ubuntu 3.19 zurĂŒckportiert und auch auf dem 4.2-Kernel getestet, beides erfolglos. Das Problem ist zu diesem Zeitpunkt auch auf 4.4-rc3 net-next branch noch vorhanden.
@rsampaio Wie hast du das getestet? Ich kann diesen Fehler nicht zuverlÀssig mit Docker auf jedem Kernel auslösen. Es passiert einfach manchmal.
@fxposter wir können das Problem auch auĂerhalb der Produktion nicht reproduzieren, daher musste ich einige Instanzen mit dem gepatchten Kernel in der Produktion booten.
Manchmal beheben wir es mit einer sehr ungewöhnlichen Ressource: Wir verschieben die Containerverzeichnisse von /var/lib/docker/aufs/mnt
Damit ... VIELLEICHT können wir den Docker-Neustart starten und die Verzeichnisse zurĂŒck verschieben.
Ansonsten... nur Neustart.
@rsampaio redest du jetzt von der Heroku-Produktion? Wie können Sie dieses Problem vermeiden, da Ihr gesamtes GeschÀft um Container/etc herum aufgebaut ist?
@rsampaio verwenden Sie --userland-proxy=false
oder nur eine groĂe Anzahl erstellter Container? Ich kann es ziemlich einfach mit --userland-proxy=false
reproduzieren und mit etwas Last ohne :)
@LK4D4 Ich glaube, es ist nur eine groĂe Menge erstellter / zerstörter Container, insbesondere Container, die viel ausgehenden Datenverkehr ausfĂŒhren. Wir verwenden auch LXC anstelle von Docker, aber der Fehler ist genau derselbe wie der hier beschriebene. Ich kann versuchen, ihn zu reproduzieren Wenn Sie Ihre Methode verwenden, wenn sie leicht zu beschreiben ist und/oder keine Produktionsauslastung erfordert, besteht die Idee darin, einen Crashdump zu erstellen und _vielleicht_ weitere Hinweise zu finden, was genau diesen Fehler auslöst.
@rsampaio Ich kann bei lÀngerer Nutzung von https://github.com/crosbymichael/docker-stress reproduzieren
Gab es irgendwelche Updates / VorschlĂ€ge fĂŒr die Behebung dieses Problems?
@joshrendek es ist ein Kernel-Bug. Sieht so aus, als ob selbst der neu veröffentlichte Kernel 4.4 das nicht behebt, also gibt es irgendwo noch mindestens eine weitere Race Condition :)
Kernel-Fehler
=)
@samvignoli könnten Sie Ihre Kommentare konstruktiv halten? FĂŒhlen Sie sich frei, eine PR zu öffnen, wenn Sie Möglichkeiten haben, dieses Problem zu beheben.
Wurde dieser Fehler bereits im Upstream (Kernel-Mailingliste) gemeldet?
Sicher war. Der erste Kommentar verweist auch auf diesen Fehler: https://bugzilla.kernel.org/show_bug.cgi?id=81211
Seit 2014 geöffnet. Keine Kommentare von jemandem, der daran arbeitet, auĂer zu sagen, dass es höchstwahrscheinlich eine Anwendung ist, die es falsch verwendet.
Danke fĂŒr den Link, Justin! Ich werde Linus trollen =)
mit freundlichen GrĂŒĂen. =* :herz:
@samvignoli bitte mach das nicht, es hilft niemandem.
Kann das jemand in einem kleinen VM-Image reproduzieren?
Vielleicht kann ich mir mit gdb und viel kprintf die HĂ€nde schmutzig machen.
Fehler noch offen.
Betriebssystem: CentOS 7.2
Kernel: 4.4.2 elrepo-Kernel-ml
Docker: 1.10.2
fs: overlayfs mit xfs
Protokoll:
Message from syslogd<strong i="11">@host118</strong> at Feb 29 14:52:47 ...
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
[root<strong i="14">@host118</strong> ~]# uname -a
Linux host118 4.4.2-1.el7.elrepo.x86_64 #1 SMP Thu Feb 18 10:20:19 EST 2016 x86_64 x86_64 x86_64 GNU/Linux
[root<strong i="15">@host118</strong> ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root<strong i="16">@host118</strong> ~]# lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.2.1511 (Core)
Release: 7.2.1511
Codename: Core
[root<strong i="17">@host118</strong> ~]# docker info
Containers: 5
Running: 2
Paused: 0
Stopped: 3
Images: 154
Server Version: 1.10.2
Storage Driver: overlay
Backing Filesystem: xfs
Execution Driver: native-0.2
Logging Driver: json-file
Plugins:
Volume: local
Network: bridge null host
Kernel Version: 4.4.2-1.el7.elrepo.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 3.858 GiB
Name: host118
ID: 2NW7:Y54E:AHTO:AVDR:S2XZ:BGMC:ZO4I:BCAG:6RKW:KITO:KRM2:DQIZ
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
diese Protokollanzeige beim AusfĂŒhren von sameersbn/docker-gitlab docker image:
wget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml
docker-compose up
Ich habe vielleicht nur GlĂŒck - aber nach dem Anwenden dieser sysctl-Einstellungen ist die HĂ€ufigkeit dieses Ereignisses weit zurĂŒckgegangen.
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 600
net.ipv4.tcp_tw_reuse = 1
net.netfilter.nf_conntrack_generic_timeout = 120
net.netfilter.nf_conntrack_max = 1555600000
net.netfilter.nf_conntrack_tcp_timeout_close = 10
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_established = 300
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300
@joshrendek was ist die Motivation hinter diesen Einstellungen?
@kmike Dies war, um einige andere Conntrack-Probleme (IP-Tabellen werden voll) zu beheben, die wir hatten - es scheint jedoch als Nebeneffekt etwas in Bezug auf mein ursprĂŒngliches Problem getan zu haben
Könnten Sie das Vorher/Nachher zeigen, damit wir sehen können, was sich tatsÀchlich geÀndert hat? Sind Sie bereit, diese Einstellungen binÀr zu durchsuchen und zu sehen, ob es einen kleineren Satz gibt?
Ich verwende CoreOS Stable (899.13.0) in einer Compute Engine-VM. Dieser Fehler tritt jedes Mal auf, wenn ich den Server mit dem folgenden Flag auf 0
(Standardeinstellung) starte. Ich habe mehrmals hin und her getestet und mit deaktiviertem IPv6 kann ich alle Container im Knoten ohne Fehler starten:
$ cat /etc/sysctl.d/10-disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
Ich verwende den gcloud-Container, um von GCR herunterzuladen, also ist das Problem möglicherweise IPv6 + Herunterladen von MBs an Bildern + SchlieĂen der Container schnell.
Docker-Version als Referenz:
Client:
Version: 1.9.1
API version: 1.21
Go version: go1.4.3
Git commit: 9894698
Built:
OS/Arch: linux/amd64
Server:
Version: 1.9.1
API version: 1.21
Go version: go1.4.3
Git commit: 9894698
Built:
OS/Arch: linux/amd64
Ich habe auch die vorherigen sysctl-Flags in dieser Ausgabe getestet; aber einige haben diesen Wert bereits und der Rest schien nichts im Zusammenhang mit diesem Fehler zu Àndern:
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 600
-----> not found in CoreOS
net.ipv4.tcp_tw_reuse = 1
-----> default: 0
net.netfilter.nf_conntrack_generic_timeout = 120
-----> default: 600
net.netfilter.nf_conntrack_max = 1555600000
-----> default: 65536
net.netfilter.nf_conntrack_tcp_timeout_close = 10
-> already: 10
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
-> already: 60
net.netfilter.nf_conntrack_tcp_timeout_established = 300
-----> default: 432000
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
-> already: 120
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
-> already: 30
net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300
-> already: 300
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
-> already: 60
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120
-> already: 120
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
-> already: 120
net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300
-> already: 300
Ich sehe das Problem immer noch, wenn ich net.ipv6.conf.all.disable_ipv6=1 setze.
Das Docker-Stress-Tool kann das Problem sehr einfach erzeugen.
https://github.com/crosbymichael/docker-stress
Dies ist die BinĂ€rdatei, die ich fĂŒr das obige Tool erstellt habe.
https://storage.googleapis.com/donny/main
https://storage.googleapis.com/donny/stress.json
Sobald wir das Protokoll "unregister_netdevice: wait for veth6c3b8b0 to free. Usage count" sehen, hÀngt Docker. Ich denke, dies ist ein Kernel-Problem, das von Docker ausgelöst wird. Dies geschieht nur, wenn der Docker userland-proxy ausgeschaltet ist (--userland-proxy=false).
Ich habe dies mit und ohne aktiviertem Userland-Proxy passieren lassen, also wĂŒrde ich nicht nur sagen, wenn er ausgeschaltet ist.
Es könnte sein, dass es die Situation verschlimmert; Ich weiĂ, dass wir einmal versucht haben, --userland-proxy=false
zum Standard zu machen, dies jedoch zurĂŒckgesetzt, weil es Nebenwirkungen gab https://github.com/docker/docker/issues/14856
Ich habe den Fehler seit gestern auch einmal gesehen, das Deaktivieren von IPv6 ist kein Fix; aber ohne das Flag kann ich nicht einmal alle Container des Servers starten, ohne Docker zu zerstören.
LĂ€uft auf CoreOS 1010.1.0 mit Kubernetes 1.2.2 und Docker 1.10.3
Kubernetes hat kubelet (auf MobilgerĂ€ten, kann es nicht nachschlagen) ein Flag hinzugefĂŒgt fĂŒr
Haarnadelmodus. Ăndere es in "Promiscuous Bridge" oder was auch immer gĂŒltig ist
Wert ist. Dieser Fehler ist seit dieser Ănderung nicht mehr aufgetreten.
@bprashanh
Bitte bestÀtigen oder widerlegen?
Am 13. April 2016 12:43 Uhr, "Aaron Crickenberger" [email protected]
schrieb:
LĂ€uft auf CoreOS 1010.1.0 mit Kubernetes 1.2.2 und Docker
1.10.3â
Sie erhalten dies, weil Sie einen Kommentar abgegeben haben.
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/docker/docker/issues/5618#issuecomment -209617342
Um dies auf AWS mit Linux 4.4.5-15.26.amzn1.x86_64 mit Docker-Version 1.9.1 zu erhalten, erstellen Sie a34a1d5/1.9.1.
Ruby 2.3.0 mit Alpine-Image lÀuft im Container und verursacht dies
Kernel:[58551.548114] unregister_netdevice: Warten darauf, dass lo frei wird. Nutzungsanzahl = 1
Irgendeine Lösung dafĂŒr?
habe das zum ersten Mal auf Linux 3.19.0-18-generic #18~14.04.1-Ubuntu SMP Wed May 20 09:38:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
Ein paar Neustarts haben es behoben.
@MrMMorris Behoben, da Sie sicher sind, dass das Problem
Es ist ziemlich klar, dass dies ein Rennen im Kernel ist, bei dem ein Refcount verloren geht
irgendwo. Dies ist ein WIRKLICH schwer zu verfolgender Fehler, aber soweit wir das beurteilen können
existiert immernoch.
Am Montag, 2. Mai 2016 um 22:52 Uhr, Sune Keller [email protected]
schrieb:
@MrMMorris https://github.com/MrMMorris Behoben, da Sie sicher sind, dass
das Problem ist fĂŒr immer verschwunden, oder du erlebst es nicht wieder
Jetzt? Könnte eine Rennbedingung sein...â
Sie erhalten dies, weil Sie einen Kommentar abgegeben haben.
Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/docker/docker/issues/5618#issuecomment -216444133
Jep. Ich habe CoreOS 1032.0.0 mit Kernel 4.5 ausprobiert und das Problem besteht immer noch.
Ich bin gestern wieder auf CoreOS 1010.1.0 mit Kernel 4.5.0 gestoĂen, nachdem mehrere Container in schneller Folge gestartet und beendet wurden.
Ich habe diesen Fehler.
Docker-Version: 1.9.1
Kernel-Version: 4.4.8-20.46.amzn1.x86_64
Betriebssystem: Amazon Linux AMI 2016.03
@sirlatrom nicht behoben. Wiedersehen đ Mehrere Neustarts erforderlich, um das Problem zu beheben.
Derzeit lÀuft 3.19.0-18-generic. Werde versuchen, auf die neueste Version zu aktualisieren
Ich auch! :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei : :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: : schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei : :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: : schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei : :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: : schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei : :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei: :schrei:
@samvignoli Ihre Kommentare sind nicht konstruktiv. Bitte hör auf zu posten.
Sorry, hab die Daumen hoch Funktion vergessen.
Reproduziert in Fedora Server 23 - 4.2.5-300.fc23.x86_64. Der Docker-Dienst kann nicht neu gestartet werden - starten Sie nur den Knoten neu.
Gleiches Problem beim Fedora 24 Kernel: 4.5.2-302.fc24.x86_64. hat keine HĂ€nger verursacht, aber eine Log-Datei spammt.
@hapylestat Kannst du systemctl restart docker
versuchen? Dies hat dazu gefĂŒhrt, dass alles fĂŒr mich hĂ€ngen blieb.
Vielen Dank
Dies passiert bei meinen (CoreOS, EC2)-Rechnern ziemlich hĂ€ufig. Falls es ĂŒberhaupt hilfreich ist, hier sind alle Protokolle, die sich auf das festsitzende Veth-GerĂ€t in einem Fall dieses Fehlers beziehen.
$ journalctl | grep veth96110d9
May 14 16:40:27 ip-10-100-37-14.eu-west-1.compute.internal systemd-udevd[4189]: Could not generate persistent MAC address for veth96110d9: No such file or directory
May 14 16:40:27 ip-10-100-37-14.eu-west-1.compute.internal kernel: IPv6: ADDRCONF(NETDEV_UP): veth96110d9: link is not ready
May 14 16:40:27 ip-10-100-37-14.eu-west-1.compute.internal systemd-networkd[665]: veth96110d9: Configured
May 14 16:40:27 ip-10-100-37-14.eu-west-1.compute.internal kernel: IPv6: ADDRCONF(NETDEV_CHANGE): veth96110d9: link becomes ready
May 14 16:40:27 ip-10-100-37-14.eu-west-1.compute.internal systemd-networkd[665]: veth96110d9: Gained carrier
May 14 16:40:27 ip-10-100-37-14.eu-west-1.compute.internal systemd-networkd[665]: veth96110d9: Lost carrier
May 14 16:40:27 ip-10-100-37-14.eu-west-1.compute.internal systemd-networkd[665]: veth96110d9: Removing non-existent address: fe80::98f4:98ff:fea2:d83b/64 (valid for ever)
May 14 16:40:32 ip-10-100-37-14.eu-west-1.compute.internal kernel: eth0: renamed from veth96110d9
May 14 16:53:45 ip-10-100-37-14.eu-west-1.compute.internal kernel: veth96110d9: renamed from eth0
May 14 16:53:45 ip-10-100-37-14.eu-west-1.compute.internal systemd-networkd[665]: veth96110d9: Configured
May 14 16:53:45 ip-10-100-37-14.eu-west-1.compute.internal systemd-networkd[665]: veth96110d9: Gained carrier
May 14 16:53:45 ip-10-100-37-14.eu-west-1.compute.internal kernel: IPv6: veth96110d9: IPv6 duplicate address fe80::42:aff:fee0:571a detected!
May 14 16:53:45 ip-10-100-37-14.eu-west-1.compute.internal systemd-networkd[665]: veth96110d9: Lost carrier
May 14 16:53:45 ip-10-100-37-14.eu-west-1.compute.internal systemd-networkd[665]: veth96110d9: Removing non-existent address: fe80::42:aff:fee0:571a/64 (valid for ever)
May 14 16:53:55 ip-10-100-37-14.eu-west-1.compute.internal kernel: unregister_netdevice: waiting for veth96110d9 to become free. Usage count = 1
May 14 16:54:05 ip-10-100-37-14.eu-west-1.compute.internal kernel: unregister_netdevice: waiting for veth96110d9 to become free. Usage count = 1
May 14 16:54:15 ip-10-100-37-14.eu-west-1.compute.internal kernel: unregister_netdevice: waiting for veth96110d9 to become free. Usage count = 1
May 14 16:54:25 ip-10-100-37-14.eu-west-1.compute.internal kernel: unregister_netdevice: waiting for veth96110d9 to become free. Usage count = 1
May 14 16:54:35 ip-10-100-37-14.eu-west-1.compute.internal kernel: unregister_netdevice: waiting for veth96110d9 to become free. Usage count = 1
Dies scheint zu passieren, wenn ich viele Container gleichzeitig entferne (in meinem Fall, wenn ich k8s-Pods en-masse lösche).
FĂŒr diejenigen, die sagen, dass ein Neustart das Problem behoben hat - haben Sie die Maschinen neu gestartet oder gestoppt / gestartet? Auf physischen Maschinen musste ich einen Remote-Power-Reset verwenden, um die Maschine wieder hochzufahren.
@joshrendek , ich musste den Kaltstart von iLO verwenden (dh einen physischen Power-Cycle).
@joshrendek Ich habe jetzt ein Skript, das darauf reboot -f
tut, wenn es passiert đą.
Könnte das Problem gefunden haben (oder einfach nur GlĂŒck gehabt haben). Ich habe das Docker-Graph-Verzeichnis von einer XFS-partitionierten Festplatte auf eine EXT4-partitionierte Festplatte verschoben und kann das Problem nicht reproduzieren (sowie eine Menge anderer XFS-Fehler, die ich bekam). Ich erinnere mich , dass
Ich habe versucht zu provozieren, indem ich build
, run
, stop
, delete
in einer Endlosschleife fĂŒr verschiedene Bilder ausgefĂŒhrt habe, wobei pro Zyklus etwa 10 Container erstellt wurden die letzten Stunden.
@joedborg Welchen Grafiktreiber verwendest du? GerĂ€tezuordnung? Ăberlagerung?
@thaJeztah Guter Punkt, das hĂ€tte ich erwĂ€hnen sollen. Ich verwende Overlay-Treiber mit (jetzt) ââEXT4-Backing FS.
Ich habe frĂŒher den Devicemapper verwendet (weil ich Fedora Server verwende), aber ich hatte jede Menge Schmerzen (wie ich glaube, viele), insbesondere bei Lecks, bei denen der Mapper nach dem Löschen eines Containers keinen Platz mehr in den Pool zurĂŒckgibt.
Wenn es hilft, bin ich auf Docker 1.11.1 und Kernel 4.2.5-300.fc23.x86_64.
@joedborg interessant, weil in den RHEL-Dokumenten erwĂ€hnt wurde, dass nur EXT4 unter RHEL/CentOS 7.1 und nur XFS unter RHEL/CentOS 7.2 unterstĂŒtzt wird. Ich hĂ€tte erwartet, dass XFS dann auf neueren Versionen funktioniert
@thaJeztah ah das ist seltsam. Ich versuche, an andere Dinge zu denken, die es sein könnten. Ich habe noch einmal von oben gelesen und es scheint, dass einige Leute die gleiche Konfiguration ausfĂŒhren. Der einzige andere Unterschied besteht darin, dass die XFS-Festplatte eine Spindel ist und die EXT4 eine SSD. Ich werde in der Zwischenzeit die Einweichtests fortsetzen. Ich habe auch prod auf das gleiche Setup umgestellt, so dass wir in KĂŒrze eine Antwort haben werden. Allerdings war es vorher bei fast jedem stop
so, also ist es sicherlich besser.
@joedborg na ja, das sind in der Tat nĂŒtzliche Informationen
gleicher Fehler hier, von Kernel 4.2 bis 4.5, gleiche Docker-Version.
Ăbrigens, ich betreibe mehrere Virtualbox-Maschinen gleichzeitig auf derselben Box.
$ docker version
Client:
Version: 1.8.3
API version: 1.20
Go version: go1.4.2
Git commit: f4bf5c7
Built: Mon Oct 12 05:27:08 UTC 2015
OS/Arch: linux/amd64
Server:
Version: 1.8.3
API version: 1.20
Go version: go1.4.2
Git commit: f4bf5c7
Built: Mon Oct 12 05:27:08 UTC 2015
OS/Arch: linux/amd64
$ docker info
Containers: 3
Images: 461
Storage Driver: devicemapper
Pool Name: docker-253:7-1310721-pool
Pool Blocksize: 65.54 kB
Backing Filesystem: extfs
Data file: /dev/loop0
Metadata file: /dev/loop1
Data Space Used: 18.08 GB
Data Space Total: 107.4 GB
Data Space Available: 18.37 GB
Metadata Space Used: 26.8 MB
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.121 GB
Udev Sync Supported: true
Deferred Removal Enabled: false
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Library Version: 1.02.90 (2014-09-01)
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 4.5.0-0.bpo.1-amd64
Operating System: Debian GNU/Linux 8 (jessie)
CPUs: 4
Total Memory: 15.56 GiB
Name: tungsten
ID: HJX5:TKIH:TF4G:JCQA:MHQB:YYUD:DHBL:53M7:ZRY2:OCIE:FHY7:NLP6
Ich habe dieses Problem mit dem overlay
Grafiktreiber, wobei sich das Verzeichnis auf einem ext4
FS befindet. Also denke ich nicht, dass xfs
das Problem ist đą
@obeattie Ja, die Leute scheinen es auch auf devicemapper
zu bekommen. Holz anfassen, das Problem hatte ich seit dem Wechsel nicht mehr. Wie bereits erwÀhnt, habe ich auch die physische Festplatte getauscht. Das wird interessant!
Dieses Problem korreliert in keiner Weise mit dem Dateisystem. Ich habe dieses Problem mit zfs, overlayfs, devicemapper, btrfs und aufs gesehen. Auch mit oder ohne Wechsel. Es ist nicht einmal auf Docker beschrÀnkt, ich habe den gleichen Fehler auch mit lxc gehabt. Die einzige Problemumgehung, die ich derzeit sehe, besteht darin, den Container nicht gleichzeitig zu stoppen.
Wenn es hilft, erhalte ich dieselbe Fehlermeldung auf der neuesten ec2-Instance, die von AWS AMI unterstĂŒtzt wird. Docker-Version zeigt-
Client:
Version: 1.9.1
API version: 1.21
Go version: go1.4.2
Git commit: a34a1d5/1.9.1
Built:
OS/Arch: linux/amd64
Server:
Version: 1.9.1
API version: 1.21
Go version: go1.4.2
Git commit: a34a1d5/1.9.1
Built:
OS/Arch: linux/amd64
Einfach an Bord springen. Ich sehe das gleiche Verhalten bei der neuesten Amazon ec2-Instance. Nach einiger Zeit kippt der BehÀlter einfach um und reagiert nicht mehr.
$ Docker-Info
BehÀlter: 2
Bilder: 31
Serverversion: 1.9.1
Speichertreiber: devicemapper
Poolname: docker-202:1-263705-pool
Pool-BlockgröĂe: 65,54 kB
BasisgerĂ€tegröĂe: 107,4 GB
Backup-Dateisystem:
Datendatei: /dev/loop0
Metadatendatei: /dev/loop1
Verwendeter Datenspeicher: 1.199 GB
Datenspeicher insgesamt: 107,4 GB
VerfĂŒgbarer Datenspeicher: 5.754 GB
Verwendeter Metadaten-Speicherplatz: 2,335 MB
Metadatenspeicher insgesamt: 2.147 GB
VerfĂŒgbarer Metadatenspeicher: 2.145 GB
UnterstĂŒtzte Udev-Synchronisierung: wahr
Deferred Removal aktiviert: false
Verzögerte Löschung aktiviert: false
Anzahl verzögerter gelöschter GerÀte: 0
Datenschleifendatei: /var/lib/docker/devicemapper/devicemapper/data
Metadaten-Schleifendatei: /var/lib/docker/devicemapper/devicemapper/metadata
Bibliotheksversion: 1.02.93-RHEL7 (2015-01-28)
AusfĂŒhrungstreiber: native-0.2
Protokollierungstreiber: json-Datei
Kernel-Version: 4.4.10-22.54.amzn1.x86_64
Betriebssystem: Amazon Linux AMI 2016.03
CPUs: 1
Gesamtspeicher: 995,4 MiB
Name: [redigiert]
ID: OB7A:Q6RX: ZRMK:4R5H : ZUQY:BBNK : BJNN:OWKS :FNU4:7NI2: AKRT:5SEP
$ Docker-Version
Klient:
Version: 1.9.1
API-Version: 1.21
Go-Version: go1.4.2
Git-Commit: a34a1d5/1.9.1
Gebaut:
Betriebssystem/Arch: linux/amd64
Server:
Version: 1.9.1
API-Version: 1.21
Go-Version: go1.4.2
Git-Commit: a34a1d5/1.9.1
Gebaut:
Betriebssystem/Arch: linux/amd64
Wie in den obigen Kommentaren, lĂ€uft auch auf EC2 zufĂ€llig ĂŒber Elastic Beanstalk mit 64bit Amazon Linux 2016.03 v2.1.0 running Docker 1.9.1
Etwas anekdotisch zu diesem Zeitpunkt, aber ich habe kĂŒrzlich versucht, testweise auf etwa 18 Servern ein Upgrade von Kernel 4.2.0 auf 4.5.5 durchzufĂŒhren, und dieses Problem wurde erheblich schlimmer (von mehreren Tagen auf nicht mehr als 4 Stunden zwischen den Problemen).
Das war auf Debian 8
Genau das gleiche Setup wie @jonpaul und @g0ddard
Wir suchen nach Möglichkeiten, diesen Fehler zu beheben.
Die erste Sache (die funktionieren kann oder auch nicht, es ist riskant) ist, die API in FĂ€llen verfĂŒgbar zu halten, in denen dies auftritt: #23178
Hallo. Ich bin auch von diesem Fehler gebissen worden...
Jun 08 17:30:40 node-0-vm kernel: unregister_netdevice: waiting for veth846b1dc to become free. Usage count = 1
Ich verwende Kubernetes 1.2.4 auf CoreOS Beta, Flannel und laufe auf Azure. Gibt es eine Möglichkeit, dieses Problem zu beheben? Der Kernel-Bug-Thread scheint tot zu sein. Einige Leute berichten, dass das Deaktivieren von IPv6 im Kernel, die Verwendung von --userland-proxy=true
oder die Verwendung von aufs anstelle von Overlay-Speicher helfen, wÀhrend andere dies nicht tun ... Es ist ein bisschen verwirrend.
Wie @justin8 habe ich dies auch bemerkt, nachdem ich mein Fedora 23-System auf Kernel 4.5.5 aktualisiert hatte; das Problem bleibt mit Kernel 4.5.6.
Wir sind auf diesen Fehler gestoĂen, als der Container sein Speicherlimit erreichte. Unsicher, ob es damit zusammenhĂ€ngt oder nicht.
gleiches Problem hier
# docker version
Client:
Version: 1.9.1
API version: 1.21
Go version: go1.4.3
Git commit: a34a1d5
Built: Fri Nov 20 17:56:04 UTC 2015
OS/Arch: linux/amd64
Server:
Version: 1.9.1
API version: 1.21
Go version: go1.4.3
Git commit: a34a1d5
Built: Fri Nov 20 17:56:04 UTC 2015
OS/Arch: linux/amd64
# docker info
Containers: 213
Images: 1232
Server Version: 1.9.1
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Backing Filesystem: extfs
Dirs: 1667
Dirperm1 Supported: true
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.19.0-5-exton
Operating System: Debian GNU/Linux 7 (wheezy)
CPUs: 4
Total Memory: 21.58 GiB
Name: [redacted]
Message from syslogd@[redacted] at Jun 24 10:07:54 ...
kernel:[1716405.486669] unregister_netdevice: waiting for lo to become free. Usage count = 2
Message from syslogd@[redacted] at Jun 24 10:07:56 ...
kernel:[1716407.146691] unregister_netdevice: waiting for veth06216c2 to become free. Usage count = 1
Centos7.2
Docker 1.10.3
Dasselbe Problem
Ich habe einen "Einzeiler", der dieses Problem fĂŒr mich auf einem EC2 (m4.large) mit CoreOS 1068.3.0 mit dem 4.6.3-Kernel (also sehr aktuell) reproduzieren wird. FĂŒr mich dauert es ungefĂ€hr 300 Iterationen, aber YMMV.
Linux ip-172-31-58-11.ec2.internal 4.6.3-coreos #2 SMP Sa 25. Juni 00:59:14 UTC 2016 x86_64 Intel(R) Xeon(R) CPU E5-2676 v3 @ 2,40GHz GenuineIntel GNU/Linux
CoreOS-Beta (1068.3.0)
Docker-Version 1.10.3, Build 3cd164c
Ein paar hundert Wiederholungen der Schleife hier werden schlieĂlich dockerd hĂ€ngen und der Kernel gibt Fehlermeldungen aus wie
kernel: unregister_netdevice: waiting for veth8c7d525 to become free. Usage count = 1
Die Reproduktionsschleife ist
i=0; while echo $i && docker run --rm -p 8080 busybox /bin/true && docker ps; do sleep 0.05; ((i+=1)); done
BEARBEITUNG
userland-proxy=false
Das obige Skript von
$ docker --version
Docker version 1.10.3, build f476348/1.10.3
$ docker info
Containers: 3
Running: 0
Paused: 0
Stopped: 3
Images: 42
Server Version: 1.10.3
Storage Driver: devicemapper
Pool Name: docker_vg-docker--pool
Pool Blocksize: 524.3 kB
Base Device Size: 107.4 GB
Backing Filesystem: xfs
Data file:
Metadata file:
Data Space Used: 17.69 GB
Data Space Total: 73.67 GB
Data Space Available: 55.99 GB
Metadata Space Used: 5.329 MB
Metadata Space Total: 130 MB
Metadata Space Available: 124.7 MB
Udev Sync Supported: true
Deferred Removal Enabled: true
Deferred Deletion Enabled: true
Deferred Deleted Device Count: 0
Library Version: 1.02.109 (2015-09-22)
Execution Driver: native-0.2
Logging Driver: journald
Plugins:
Volume: local
Network: bridge null host
Kernel Version: 4.5.7-200.fc23.x86_64
Operating System: Fedora 23 (Workstation Edition)
OSType: linux
Architecture: x86_64
Number of Docker Hooks: 0
CPUs: 4
Total Memory: 15.56 GiB
Name: <hostname>
ID: TOKW:AWJF:3VZU:55QA:V3KD:ZCA6:4XWW:JBY2:2Q5C:3S65:3ZXV:XRXG
Registries: docker.io (secure)
Dieses Problem tritt bei meinem Kubernetes-Cluster ziemlich hĂ€ufig auf, aber ich kann es mit den Stressern oder dem One -Liner von @btalbot nicht zuverlĂ€ssig reproduzieren. Ich habe versucht, es auf zwei Azure-VMs mit CoreOS 1068.3.0 auszufĂŒhren.
Die erste VM war eine Standard_D1_v2 (3,5 GB Ram, 1 Kern) - das Skript hat > ââ3000 Iterationen gemacht.
Zweite VM war eine Standard_DS15_v2 (140GB Ram, 20 Kerne) - das Skript hat >7600 Iterationen gemacht.
Ich habe meinen vorherigen Kommentar (https://github.com/docker/docker/issues/5618#issuecomment-229545933) dahingehend aktualisiert, dass ich dies nur reproduzieren kann, wenn userland-proxy=false.
Es reproduziert fĂŒr mich auf EC2 t2.micro (Single Core) VMs sowie m4.large (Multi Core) beide mit HVM. Ich habe noch nicht gesehen, dass es mit VirtualBox auf meinem Laptop passiert ist, unabhĂ€ngig von der Einstellung von userland-proxy.
Wir sind auf diesen Fehler gestoĂen, als wir Flannel mit aktiviertem Hairpin-veth im Kubernetes-Cluster verwendet haben (unter Verwendung von iptables-Proxy). Dieser Fehler trat nur auf, wenn wir zu viele Container ausfĂŒhren und stoppen. Wir wechseln zur Verwendung des cbr0-Bridge-Netzwerks und des Promiscuous-Bridge-Hairpin-Modus und sehen es nie wieder.
TatsÀchlich ist es einfach, diesen Fehler zu reproduzieren, wenn Sie Hairpin-veth verwenden, starten Sie diesen Job einfach mit 100 Containern mit Kubernetes.
Am 01.07.2016 08:01 schrieb manoj0077:
@btalbot https://github.com/btalbot also mit 1.12 können wir neu starten
dockerd, ohne laufende Container zu beeintrĂ€chtigen. Also wĂŒrde Dockerd neu starten
Hilfe hier in diesem Fall?AFAICT, Event mit 1.12, Docker-Container-Prozesse sind noch Kinder
des Docker-Daemons.
@sercand wie hast du den Promiscuous-Bridge-Haarnadelmodus eingestellt? Ich kann keine Dokumentation von Docker dazu sehen, oder vielleicht verwenden sie einen anderen Namen
Gibt es ein offizielles Wort von Docker đł, wann dies betrachtet werden könnte? Dies ist das am zweithĂ€ufigsten kommentierte offene Thema ; ist sehr schwerwiegend (erfordert einen Neustart des Hosts); ist reproduzierbar; und ich sehe keinen wirklichen Fortschritt, um die Ursache zu finden oder zu beheben đ.
Dies scheint höchstwahrscheinlich ein Kernel-Problem zu sein, aber das Ticket auf Bugzilla stagniert seit Monaten. WÀre es hilfreich, unsere TestfÀlle dort zu posten?
@justin8 Ich denke, das sind Kubelet-Flags: --configure-cbr0
und --hairpin-mode
@sercand Ich verwende auch Flanell. Gibt es einen Nachteil bei der Verwendung von --hairpin-mode=promiscuous-bridge
?
@obeattie Ich stimme zu. :(
FTR Ich habe es geschafft, das Problem mit dem Stresser -Job von @sercand auf einem von mir eingerichteten Kubernetes-
@sercand Könnten Sie bitte die Schritte beschreiben, um mit der Verwendung von promiscuous-bridge
zu beginnen? Ich habe das Flag --configure-cbr0=true
zum Kubelet des Knotens hinzugefĂŒgt, aber es beschwert sich:
ConfigureCBR0 requested, but PodCIDR not set. Will not configure CBR0 right now
. Ich dachte, dieses PodCIDR sollte vom Master kommen? Vielen Dank.
BEARBEITEN: Es scheint, dass ich --allocate-node-cidrs=true --cluster-cidr=10.2.0.0/16
zur Controller-Manager-Konfiguration hinzufĂŒgen musste, aber da ich keinen Cloud-Anbieter (Azure) habe, funktionieren die Routen wahrscheinlich nicht.
@justin8 Ich bin diesem Dokument gefolgt.
@edevil aus der Dokumentation hairpin-mode ist fĂŒr "Dies ermöglicht es Endpunkten eines Dienstes, Lasten auf sich selbst auszugleichen, wenn sie versuchen sollten, auf ihren eigenen Dienst zuzugreifen". Ăbrigens lĂ€uft mein Cluster in Azure und es war keine leichte Aufgabe.
@sercand Laut dem Dokument sollten wir, wenn wir --allocate-node-cidrs=true
auf dem Controller-Manager verwenden, einen Cloud-Anbieter verwenden, damit er die Routen einrichtet. Da es fĂŒr Azure keinen Kubernetes-Cloudanbieter gibt, hatten Sie da keine Probleme? Richten Sie die Routen manuell ein? Vielen Dank.
@edevil Ich verwende Terraform, um Routen zu erstellen. Sie finden es in diesem Repo . Ich habe diese Konfiguration schnell erstellt und nur einmal getestet. Ich hoffe, es reicht aus, die grundlegende Logik dahinter zu erlÀutern.
@morvans @btalbot hast du es mit 1.12 versuchen können ...?
Ich kann bestĂ€tigen, dass ich das Problem nicht mehr reproduzieren kann, wenn ich mich von Hairpin-veth wegbewege und die cbr0-BrĂŒcke verwende.
Nur fĂŒr den Fall: Hat jemand dieses Problem mit dem Bare Metal? Wir haben dies beim Testen von Rancher-Clustern in unserem VMWare-Labor gesehen, aber noch nie bei einer echten Bare-Metal-Bereitstellung.
Ja, dieses Problem tritt auf Bare Metal fĂŒr jeden Kernel >= 4.3 auf. Habe dies auf vielen verschiedenen Maschinen und Hardwarekonfigurationen gesehen. Die einzige Lösung fĂŒr uns war die Verwendung von Kernel 4.2.
Es passiert definitiv immer noch auf 4.2, aber es ist eine GröĂenordnung hĂ€ufiger bei neueren Versionen. Ich habe jede Hauptversion getestet, um zu sehen, ob sie besser ist, und noch nichts
Passiert auch auf CoreOS alpha 1097.0.0.
Kernel: 4.6.3
Docker: 1.11.2
Ich habe das gleiche Problem.
Docker: 1.11.2
Kernel: 4.4.8-boot2docker.
Host: Docker-Maschine mit VMWare Fusion-Treiber unter OS X.
Irgendwelche LösungsvorschlÀge?
WĂ€re wirklich hilfreich, wenn diejenigen von Ihnen, die das Problem zuverlĂ€ssig in einer Umgebung reproduzieren können, in der ein Crashdump möglich ist (auch bekannt als EC2), diese Crashdump-Datei tatsĂ€chlich teilen könnten. Weitere Informationen zum Aktivieren von Kdump in Ubuntu Trusty finden Sie hier und Dies sind die Absturzoptionen, die Sie aktivieren mĂŒssen, wenn kdump bereit ist, einen Crashdump zu erstellen:
echo 1 > /proc/sys/kernel/hung_task_panic # panic when hung task is detected
echo 1 > /proc/sys/kernel/panic_on_io_nmi # panic on NMIs from I/O
echo 1 > /proc/sys/kernel/panic_on_oops # panic on oops or kernel bug detection
echo 1 > /proc/sys/kernel/panic_on_unrecovered_nmi # panic on NMIs from memory or unknown
echo 1 > /proc/sys/kernel/softlockup_panic # panic when soft lockups are detected
echo 1 > /proc/sys/vm/panic_on_oom # panic when out-of-memory happens
Der Crashdump kann Kernel-Entwicklern wirklich helfen, mehr ĂŒber die Ursache des Referenzlecks herauszufinden, aber bedenken Sie, dass ein Crashdump auch einen Speicherabzug Ihres Hosts enthĂ€lt und möglicherweise sinnvolle Informationen enthĂ€lt.
...vernĂŒnftige Informationen.
:Ă
Ich stoĂe auf das gleiche Problem.
Jul 13 10:48:34 kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
Linux 4.6.3-1.el7.elrepo.x86_64
Docker: 1.11.2
Gleicher Fehler:
Ubuntu 14.04.4 LTS (GNU/Linux 3.19.0-25-generic x86_64)
Docker version: 1.10.3
Ist gerade direkt auf dem Terminalbildschirm passiert:
Message from syslogd<strong i="6">@svn</strong> at Jul 26 21:47:38 ...
kernel:[492821.492101] unregister_netdevice: waiting for lo to become free. Usage count = 2
Message from syslogd<strong i="7">@svn</strong> at Jul 26 21:47:48 ...
kernel:[492831.736107] unregister_netdevice: waiting for lo to become free. Usage count = 2
Message from syslogd<strong i="8">@svn</strong> at Jul 26 21:47:58 ...
kernel:[492841.984110] unregister_netdevice: waiting for lo to become free. Usage count = 2
System ist
Linux svn.da.com.ar 4.4.14-24.50.amzn1.x86_64 #1 SMP Fri Jun 24 19:56:04 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Gleiches Problem
Os: Amazon Linux AMI release 2016.03
Docker: 1.9.1
Hier auch:
Linux 4.4.14-24.50.amzn1.x86_64 x86_64
Docker version 1.11.2, build b9f10c9/1.11.2
Ich sehe das gleiche Problem bei EC2:
Docker version 1.11.2, build b9f10c9/1.11.2
NAME="Amazon Linux AMI"
VERSION="2016.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2016.03"
PRETTY_NAME="Amazon Linux AMI 2016.03"
CPE_NAME="cpe:/o:amazon:linux:2016.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
kernel:[154350.108043] unregister_netdevice: waiting for lo to become free. Usage count = 1
(auf allen meinen pty + pieper, wenn dies passiert)
"einfach" Debian Jessie + Backports:
Linux 4.6.0-0.bpo.1-amd64 #1 SMP Debian 4.6.1-1~bpo8+1 (2016-06-14) x86_64 GNU/Linux
Docker version 1.12.0, build 8eab29e
Hallo,
Wenn ich versuche, das Problem ĂŒber eine kontrollierte Umgebung zu replizieren, indem ich neue Bilder erstelle, kann ich es nicht reproduzieren.
Das Problem wurde auf einem der Server angesprochen, auf denen Docker 1.9.1 ausgefĂŒhrt wird
docker info | egrep "Version|Driver"
Server Version: 1.9.1
Storage Driver: devicemapper
Library Version: 1.02.93 (2015-01-30)
Execution Driver: native-0.2
Logging Driver: gelf
Kernel Version: 4.5.0-coreos-r1
Ich esse gleichzeitig 17753 Container im gleichzeitigen Modus und erhöhe den Datenverkehr zum Internet, ohne die veth * -Schnittstelle zu verlieren. Kann jemand Anweisungen einfĂŒgen, um das Problem konsistent zu reproduzieren?
@pegerto Sollte ziemlich einfach auszulösen sein, wenn Sie --userland-proxy=false
und gleichzeitig eine Reihe von Containern starten. Ich mache dies mit https://github.com/crosbymichael/docker-stress
Danke @cpuguy83
Konfigurieren des Daemons mit --userland-proxy=false
Ich kann das Problem leicht reproduzieren, danke, wir können sehen, dass dieses Problem Daemons betrifft, die diese Konfiguration nicht ausfĂŒhren.
Ich sehe einen Kernel-Dump am netfilter-Hook, der durch die netns-Segregation bei >=4.3 eingefĂŒhrt wurde.
Vielen Dank
Sehe dieses Problem auch. CoreOS 1068.8.0, Docker 1.10.3, Kernel 4.6.3. Ich habe einige der Systemprotokolle gezogen, wenn jemand interessiert ist.
Habe gerade mehrere...
unregistered_netdevice: waiting for lo to become free. Usage count = 1
... auf 2 VMs und auf meinem Bare-Metal-Laptop, alle mit Ubuntu 16.04 und den neuesten Kerneln (4.4.0-3[456]).
Das Ergebnis ist, dass alles hÀngt und einen harten Neustart erfordert.
Ich habe dies vor letzter Woche noch nicht erlebt und ich denke, eine der VMs war auf 1.11.3, wÀhrend die anderen alle auf 1.12.0 waren.
@RRAlex Dies ist nicht spezifisch fĂŒr eine Docker-Version.
Wenn Sie --userland-proxy=false
fĂŒr die Daemon-Optionen verwenden ... ODER (soweit ich das verstehe) Sie Kubernetes verwenden, werden Sie wahrscheinlich auf dieses Problem stoĂen.
Der Grund dafĂŒr ist, dass die Option --userland-proxy=false
Hairpin-NAT auf der Bridge-Schnittstelle aktiviert ... Dies ist etwas, das Kubernetes auch festlegt, wenn es das Netzwerk fĂŒr seine Container einrichtet.
Dies wird auf einem BYO-Knoten mit Docker Cloud (und Docker Cloud Agent) angezeigt.
Habe dies heute einmal (von etwa 25 Versuchen) auf aktuellen Amazon ECS-AMIs gesehen, auf denen Vanilla debian:jessie mit einem Befehl ausgefĂŒhrt wurde, der apt-get aktualisiert, pbzip2 installiert und dann ausfĂŒhrt (einfacher Multithread-CPU-Test).
@edevil
Die meisten von Ihnen hier beschreiben, dass Sie auf diese Situation stoĂen, wenn Sie Docker zum Starten/Stoppen von Containern verwenden, aber ich habe genau die gleiche Situation ohne Docker unter Debian:
Keine Wiederherstellungsmöglichkeit auĂer einem Hard-Reset der Maschine.
Konzentrieren Sie sich daher bei Ihren Untersuchungen, um dieses Problem zu lokalisieren / zu lösen, nicht allein auf Docker. Es ist offensichtlich ein allgemeines Problem beim schnellen Stoppen/Starten von Containern, sei es durch Docker oder durch einfache "lxc" -Befehle.
Ich wĂŒrde denken, dass dies ein Problem des Linux-Kernels ist.
Ich bin auf dieses Problem gestoĂen, als ich 3 chroot (eigentlich pbuilder) mit sehr hoher Last ausgefĂŒhrt habe.
Meine Hardware ist Loongson 3A (eine mips64el-Maschine mit 3.16-Kernel).
Als ich versuche, hinein zu ssh, bin ich auf dieses Problem gestoĂen.
Dieses Problem kann also nicht nur ĂŒber Docker oder lxc, sondern sogar ĂŒber chroot liegen.
Docker-Version 1.11.2.
kernel:[3406028.998789] unregister_netdevice: waiting for lo to become free. Usage count = 1
cat /etc/os-release
NAME=openSUSE
VERSION="Tumbleweed"
VERSION_ID="20160417"
PRETTY_NAME="openSUSE Tumbleweed (20160417) (x86_64)"
ID=opensuse
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:opensuse:20160417"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"
ID_LIKE="suse"
uname -a
Linux centre 4.5.0-3-default #1 SMP PREEMPT Mon Mar 28 07:27:57 UTC 2016 (8cf0ce6) x86_64 x86_64 x86_64 GNU/Linux
Rohmetall.
Wir hatten das Problem kĂŒrzlich auf Bare Metal (dediziert auf ovh) mit Kernel 4.6.x und Docker 1.11.2.
Nachdem wir die Kommentare hier gelesen und mehrere Problemumgehungen ausprobiert hatten, haben wir unseren Kernel auf die neueste Version des 3.14-Zweigs (3.14.74) herabgestuft und Docker auf 1.12.0 aktualisiert, um https://github.com/docker/libnetwork/issues/1189 . zu vermeiden und jetzt scheint alles in ordnung zu sein.
Ich hoffe, das kann helfen.
Alles, ich denke, Sie mĂŒssen keine Nachrichten mehr ĂŒber Docker oder chroot posten, es dreht sich alles um den Linux-Kernel.
Kann also bitte jemand aufstehen, der den Kernel in irgendeiner Weise debuggen kann, in den Teilen, in denen virtuelle Netzwerkschnittstellen fĂŒr Container deaktiviert werden? Möglicherweise treten einige Race-Conditions auf, wenn ein vorheriger Stopp eines Containers seine virtuelle Schnittstelle noch nicht vollstĂ€ndig deaktiviert/bereinigt hat, bevor ein neuer Stopp eines Containers angefordert wird.
@rdelangh Ich glaube nicht, dass dieses Problem unbedingt mit dem Kernel zusammenhÀngt.
Auf Fedora 24 kann ich das Problem mit Docker 1.10.3 aus den Fedora-Repos nicht reproduzieren, nur mit Docker 1.12.1 aus den Docker-eigenen Repos.
Beide Tests wurden mit Kernel 4.6.7-300.fc24.x86_64 durchgefĂŒhrt.
Dieses Problem wird auch auf CoreOS 1068.10.0, Docker 1.10.3, Kernel 4.6.3.
kernel: unregister_netdevice: waiting for veth09b49a3 to become free. Usage count = 1
Bei Verwendung von Kubernetes 1.3.4 auf CoreOS 1068.9.0 stabil auf EC2, Docker 1.10.3 sehe ich dieses Problem.
unregister_netdevice: waiting for veth5ce9806 to become free. Usage count = 1
unregister_netdevice: waiting for veth5ce9806 to become free. Usage count = 1
unregister_netdevice: waiting for veth5ce9806 to become free. Usage count = 1
...
uname -a
Linux <redacted> 4.6.3-coreos #2 SMP Fri Aug 5 04:51:16 UTC 2016 x86_64 Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz GenuineIntel GNU/Linux
Dieses Problem wird auch unter Ubuntu 16.04, Docker 1.12.1, Kernel 4.4.0-34-generic angezeigt
waiting for lo to become free. Usage count = 1
$ time docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
...
real 4m40.943s
user 0m0.012s
sys 0m0.004s
FĂŒr diejenigen, die Kubernetes <= 1.3.4 verwenden, können Sie dieses Problem ausnutzen: https://github.com/kubernetes/kubernetes/issues/30899 , um dieses Problem zu reproduzieren. Ich habe einen kleinen Cluster mit 1 Controller (m4.large) und 2 Workern (m4.large) auf CoreOS 1068.10 ausgefĂŒhrt.
Von dort aus können Sie 2 ReplicationController erstellen, ich habe sie hello
und hello1
basierend darauf genannt: http://pastebin.com/mAtPTrXH . Stellen Sie sicher, dass die Namen und Beschriftungen unterschiedlich sind.
Erstellen Sie dann zwei Bereitstellungen mit denselben Namen/Labels wie oben auf der Grundlage: http://pastebin.com/SAnwLnCw .
_Sobald Sie die Bereitstellungen erstellen, erhalten Sie eine unglaubliche Menge an Spam-Containern_.
Wenn Sie es fĂŒr eine Weile (einige Minuten) eingeschaltet lassen, werden Sie viele Dinge sehen, die versuchen, zu beenden/zu erstellen. Sie können die Bereitstellungen löschen und die Dinge stabilisieren lassen. Sie sollten eine gute Handvoll Terminating und ContainerCreating sehen. Wenn Sie per SSH in die Knoten einsteigen, ĂŒberprĂŒfen Sie dmesg
und docker ps
zu sehen, ob die oben genannten Symptome offensichtlich sind.
In meinem Fall habe ich ungefĂ€hr 5 Minuten gebraucht, um das ausflippen zu lassen, bevor ich das Problem sah. Ich plane, die Ănderungen vorzunehmen, mit denen @sercand und @edevil gespielt haben, und schaue, ob dies in diesem Fall fĂŒr mich funktioniert.
@edevil Liege ich nach dem Betrachten Ihres verknĂŒpften Commits richtig, dass Sie Flannel in Ihrer Umgebung insgesamt zugunsten der von Kubernetes erstellten cbro
BrĂŒcke deaktiviert/entfernt haben, um dieses Problem zu ĂŒberwinden?
Ich sehe meinerseits, dass Sie sie nicht zusammen verwenden können, weil Flanell docker0
möchte und Ihr internes Netzwerk an cbr0
richtig?
@alph486 das ist richtig, ich habe aufgehört, Flanell zu verwenden. Ich benutze die Bridge und richte die Routen fĂŒr das Pod-Netzwerk ein.
@alph486 Flanell möchte docker0 nicht verwenden. Es ist nur die StandardbrĂŒcke fĂŒr Docker, die Sie mit der Option --bridge=cbr0
docker ĂŒberschreiben können.
Unter CoreOS mĂŒssten Sie die Docker-Systemd-Unit ĂŒberschreiben.
Das Kubelet-Flag --experimental-flannel-overlay
kann die Flanell-Konfiguration lesen und die Docker-Bridge cbr0
mit der Flanell-CIDR konfigurieren.
Es wird auch den promiscuous
Modus anstelle des veth-hairpin
Modus aktivieren, der das Problem zu sein scheint.
Danke @dadux fĂŒr den Input. Wenn K8s die cbr0
Schnittstelle ĂŒbernimmt, die bereits von der ĂŒberschriebenen Einheit gebootet wurde, könnte diese Lösung im GeschĂ€ft sein; ich werde es versuchen.
Laut Dokumentation scheint promiscuous-bridge
der Standardwert fĂŒr --hairpin-mode
in Kubelet v1.3.4+ zu sein. Ich sehe das Problem immer noch damit, daher bin ich mir nicht ganz sicher, ob das die ganze Lösung ist.
Ich konnte das Problem nicht mehr reproduzieren, nachdem ich das kubenet
Netzwerk-Plugin verwendet habe (das --configure-cbr0
). Ich vermeide die Option flannel-overlay
aufgrund der Ungewissheit ihrer Zukunft (sie scheint an --configure-cbr0
gebunden zu sein).
Wenn Ihr Docker-Daemon die docker0
Bridge verwendet, hat die Einstellung von --hairpin-mode=promiscuous-bridge
keine Auswirkung, da das Kubelet versucht, die nicht vorhandene Bridge cbr0
zu konfigurieren.
FĂŒr CoreOS meine Problemumgehung, um das Kubernetes-Verhalten zu spiegeln, aber weiterhin Flanell zu verwenden:
docker0
Schnittstelle fĂŒr den Promiscuous-Modus zu konfigurieren. (Sicher gibt es eine elegantere Möglichkeit, dies zu tun?) :- name: docker.service
command: start
drop-ins:
- name: 30-Set-Promiscuous-Mode.conf
content: |
[Service]
ExecStartPost=/usr/bin/sleep 5
ExecStartPost=/usr/bin/ip link set docker0 promisc on
kubelet --hairpin-mode=none
Sie können ĂŒberprĂŒfen, ob Hairpin fĂŒr Ihre Schnittstellen aktiviert ist mit
brctl showstp docker0
oder
for f in /sys/devices/virtual/net/*/brport/hairpin_mode; do cat $f; done
Ich glaube, mein Kollege hat dies kĂŒrzlich behoben http://www.spinics.net/lists/netdev/msg393441.html , wir sind auf dieses Problem in unserer Umgebung gestoĂen und haben dann das Problem gefunden mehr. Jeder, der auf dieses Problem gestoĂen ist, kann diesen Patch ausprobieren und sehen, ob es erneut auftritt. Und aus unserer Analyse bezog es sich auf IPv6, sodass Sie auch versuchen können, IPv6 von Docker mit --ipv6=false
deaktivieren, wenn Sie den Docker-Daemon starten
@coolljt0725 Vielleicht
@dadux Danke fĂŒr deine Hilfe. Auf Kubernetes 1.3.4 CoreOS 1068 Stable, Docker 10.3, Flannel als Netzwerkschicht habe ich das Problem behoben, indem ich die folgenden Ănderungen an meinen CoreOS-Einheiten vorgenommen habe:
- name: docker.service
drop-ins:
- name: 30-Set-Promiscuous-Mode.conf
content: |
[Service]
ExecStartPost=/usr/bin/sleep 5
ExecStartPost=/usr/bin/ip link set docker0 promisc on
Folgendes zu kubelet.service
hinzugefĂŒgt:
--hairpin-mode=none
Welche Auswirkungen haben diese Ănderungen auf Docker/Kubernetes in Bezug auf den Umgang des Betriebssystems mit Schnittstellen fĂŒr Container?
Ich muss betonen, dass es sich um ein Problem mit falschem Betriebssystem-Verhalten handelt, nicht um Docker oder Kubernetes, da wir (und einige andere Leute in diesem Thread) ĂŒberhaupt nicht Docker oder Kubernetes ausfĂŒhren, aber beim Stoppen von LXC immer noch auf genau die gleichen Situationen stoĂen Container recht schnell hintereinander.
@rdelangh Du hast
Wenn diejenigen, die Docker google fĂŒr diesen Fehler verwenden, werden sie wahrscheinlich hier landen. Daher ist es sinnvoll, dass wir hier Problemumgehungen fĂŒr dieses Problem veröffentlichen, damit die Leute weitermachen können, bis die zugrunde liegenden Probleme behoben sind.
Welche Auswirkungen haben diese Ănderungen auf Docker/Kubernetes in Bezug auf den Umgang des Betriebssystems mit Schnittstellen fĂŒr Container?
- Die Docker-Ănderung in meinem Beitrag ermöglicht es dem Kubernetes-Stack, den Docker abzufragen und sicherzustellen, dass die Plattform fehlerfrei ist, wenn das Problem auftritt.
- Die Ănderung von
hairpin-mode
weist K8s im Wesentlichen an, diedocker0
BrĂŒcke unverĂ€ndert zu verwenden, und versucht daher nicht, "Kernelland"-Netzwerke und "Hairpin-Veth" zu verwenden, wo das Problem im Docker beginnt AusfĂŒhrungspfad.
Es ist eine Problemumgehung fĂŒr dieses Problem mit K8s und Docker.
Der Patch der coolljt0725-Kollegen wurde fĂŒr Stable in die Warteschlange gestellt, so dass er hoffentlich bald genug in die Distributionen zurĂŒckportiert wird. (Post von David Miller: http://www.spinics.net/lists/netdev/msg393688.html )
Nicht sicher, wo sich dieses Commit befindet und ob wir es an Ubuntu, RH usw. senden sollen, um ihnen zu helfen, es zu verfolgen und zurĂŒckzuportieren?
Irgendwann werde ich hier auftauchen, denke ich:
http://git.kernel.org/cgit/linux/kernel/git/davem/net-next.git/tree/net/ipv6/addrconf.c
EDIT: scheint hier vorhanden zu sein: https://github.com/torvalds/linux/blob/master/net/ipv6/addrconf.c
Danke an coolljt0725 und Co (und alle in diesem Thread). Da viele Leute fĂŒr einige Zeit nicht in der Lage sein werden, mit dem IPv6-Patch auf einen Kernel zu aktualisieren (derzeit alle), habe ich es geschafft, diesen Fehler zu beheben, nachdem ich viele der VorschlĂ€ge aus diesem Thread ausprobiert habe. Ich möchte einen vollstĂ€ndigen Beitrag erstellen, um Dinge nachzuverfolgen, die funktioniert haben und nicht funktioniert haben, damit niemand anderes die Probleme sehen muss, die ich gesehen habe.
TL;DR IPv6 in den Linux-Boot-Parametern deaktivieren, neu starten. Auf Coreos bedeutet dies, dass /usr/share/oem/grub.cfg
den Inhalt hat: set linux_append="ipv6.disable=1"
und dann einen Neustart. einen allgemeineren Vorschlag, der unter centos/ubuntu/debian/$linuxes funktionieren sollte, finden Sie hier
dockerd
, und mit bestimmten Kombinationen (da keine von ihnen zu funktionieren schien, war ich nicht zu wissenschaftlich, wenn ich alle Kombinationen ausprobierte):--ipv6=false
âiptables=false
âip-forward=false
âicc=false
âip-masq=false
âuserland-proxy=false
interessanterweise scheint --ipv6=false
nicht wirklich etwas zu tun -- das war ziemlich verwirrend, Container erhielten immer noch inet6-Adressen mit diesem Flag.
--userland-proxy=false
setzt den Haarnadelmodus und sollte nicht wirklich funktionieren. In Verbindung damit hatte ich etwas Hoffnung, aber auch dies löste das Problem nicht (docker0 auf den promisc-Modus setzen). Es gibt einen Hinweis auf eine Lösung zu --userland-proxy=false
hier und diese stromaufwĂ€rts bald und es lohnt sich ein weiterer Schuss sein können, wĂ€re es schön, dies unabhĂ€ngig von der Fehler in dieser Ausgabe fĂŒr die Leistung festgestellt auszuschalten , aber leider hat es noch eine weitere Fehler zu diesem Zeitpunkt.
zu lang; habe gelesen: Deaktivieren Sie IPv6 in Ihren Grub-Einstellungen. Neustart. profitieren.
Dieses Problem trat unter CentOS 7.2 (3.10.0-327.28.3.el7.x86_64) und Docker 1.12.1 (ohne k8s) auf. Das Problem tritt auf, wenn der Netzwerkverkehr zunimmt.
Das Booten des Kernels mit deaktiviertem IPv6 (wie in den vorherigen RatschlÀgen) hat nicht geholfen.
Aber das Versetzen der Docker0-Schnittstelle in den Promisc-Modus hat dies behoben. Gebrauchtes systemd-Drop-in von @dadux (danke!) - scheint jetzt gut zu funktionieren.
@rdallman Das Deaktivieren von IPv6 ĂŒber Grub verhindert unregister_netdevice
fĂŒr mich weder in Ubuntu 16.06 (Kernel 4.4.0-36-generic) noch in 14.04 (Kernel 3.13.0-95-generic). UnabhĂ€ngig von der Einstellung --userland-proxy
(entweder wahr oder falsch).
Ooooh, das ist cool, dass der Patch fĂŒr Stable in die Warteschlange gestellt wurde.
ping @aboch fĂŒr das Problem, dass --ipv6=false
nichts tut.
@trifle sorry :( danke fĂŒr das Posten von Informationen, wir haben nach einigen Testtagen noch keine Probleme, werden aber wieder aktualisieren, wenn wir auf Probleme stoĂen. Wir fĂŒhren Coreos 1122.2 (Kernel 4.7.0) aus. Docker0 auf den Promisc-Modus setzen scheint dies fĂŒr einige Leute zu beheben (kein GlĂŒck fĂŒr uns).
@RRAlex Wissen Sie, ob sich jemand bezĂŒglich eines Backports an das Ubuntu-Kernel-Team
Mailingliste des Ubuntu-Kernel-Teams:
https://lists.ubuntu.com/archives/kernel-team/2016-September/thread.html
Patch fĂŒr den stabilen Kernel:
https://github.com/torvalds/linux/commit/751eb6b6042a596b0080967c1a529a9fe98dac1d
Ubuntu-Kernel-Commit-Protokoll:
http://kernel.ubuntu.com/git/ubuntu/ubuntu-xenial.git/log/?h=master-next
(Patch ist noch nicht da)
@leonsp Ich habe versucht, sie zu dem damit verbundenen Problem zu kontaktieren:
https://bugs.launchpad.net/ubuntu/+source/linux-lts-xenial/+bug/1403152
Wenn Sie sich die letzte (#79) Antwort ansehen, hat jemand mit diesem Patch einen Kernel fĂŒr Xenial erstellt:
https://launchpad.net/~ddstreet/+archive/ubuntu/lp1403152
Ich bin mir jedoch nicht sicher, wann es in den Hauptkernelbaum von Ubuntu geht, noch in welcher Beziehung diese Person zu Ubuntu steht und ob das hilft ...
Ich kann die erwÀhnten Commits aus diesem Thread auch nicht im Ubuntu-Kernel-Commit-Log finden.
@RRAlex Die erwÀhnten Commits befinden sich im ddstreet-Zweig ~ddstreet/+git/ linux:lp1403152-xenial , hier ist das Protokoll: https://code.launchpad.net/~ddstreet/+git/linux/+ref/lp1403152-xenial
Jeder mit diesem Problem unter Ubuntu 16.04 kann es also ausprobieren. https://launchpad.net/~ddstreet/+archive/ubuntu/lp1403152
Möglicherweise weiĂ @sforshee (fĂŒr den Ubuntu-Kernel)
Ich habe es endlich geschafft, die Lösung "ipv6.disable=1" zu testen. DarĂŒber hinaus habe ich auf meinem Debian 8 auf Kernel 4.7.2 aktualisiert.
Nach dem Kernel-Upgrade und dem Aktivieren von "ipv6.disable=1" in den Kernel-Parametern habe ich es geschafft, das "waiting for lo"-Problem bei echter Arbeitslast auch ohne "--userland-proxy=false" Flag fĂŒr den Docker-Daemon abzufangen. Die gute Nachricht ist, dass ich nach der Angabe von "--userland-proxy=false" und dem Versuch, das Problem mit "docker-stress" zu reproduzieren, das nicht mehr tun kann. Aber ich bin mir ziemlich sicher, dass es unabhĂ€ngig vom Wert von "--userland-proxy" wieder auftreten wird.
So wie ich sehe, ist IPv6 definitiv an diesem Problem beteiligt, da Docker-Stress das Problem jetzt nicht mehr erfassen kann. Die schlechte Nachricht ist, dass das Problem tatsÀchlich immer noch da ist (dh es ist nur teilweise behoben).
Wird spÀter das neueste 4.8rc7 kompilieren, um mehr zu testen.
@twang2218 @coolljt0725
Hmmm.. also habe ich gerade den Ubuntu xenial 4.4.0-36 Kernel mit dem Patch von ddstreet's ppa zurĂŒckportiert :
$ uname -a
Linux paul-laptop 4.4.0-36-generic #55hf1403152v20160916b1-Ubuntu SMP Fri Sep 16 19:13:50 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Leider scheint dies das Problem fĂŒr mich nicht zu lösen. Beachten Sie, dass ich auch mit "ipv6.disable=1" arbeite. Betrachten wir mehrere unabhĂ€ngige Ursachen mit dem gleichen Ergebnis? Viele Kommentare in diesem Thread scheinen dies nahe zu legen.
Ich weiĂ nicht allzu viel darĂŒber, aber ich weiĂ, dass wir solche Fehler schon einmal hatten. Wie ich es verstehe, werden ReferenzzĂ€hlungen zu jedem NetzwerkgerĂ€t am Ende auf lo ĂŒbertragen, wenn ein Netzwerk-Namespace bereinigt wird direkt. Das macht es zu einem BĂ€ren, den man aufspĂŒren kann, denn bis Sie wissen, dass es ein Leck gab, wissen Sie nicht, mit welchem ââââGerĂ€t es verbunden war.
Ich habe nicht alle Kommentare durchgelesen, aber wenn mir jemand einen zuverlÀssigen Reproduzierer auf Ubuntu geben kann, werde ich ihn mir ansehen und sehen, ob ich etwas herausfinden kann.
@sforshee es ist nicht immer einfach zu reproduzieren, aber es wurde ein Patch erstellt (der zumindest einige der hier gemeldeten FĂ€lle behebt); http://www.spinics.net/lists/netdev/msg393441.html. Das wurde Upstream akzeptiert https://github.com/torvalds/linux/commit/751eb6b6042a596b0080967c1a529a9fe98dac1d
@thaJeztah ah, ich sehe die Frage, die du mir jetzt gestellt hast.
Der Patch befindet sich also in der Upstream-4.4-Stable-Queue, fĂŒr 16.04 wird er wahrscheinlich nicht in der nĂ€chsten Kernel-SRU (die bereits in Arbeit ist) enthalten sein, sondern in der nĂ€chsten, in etwa 5-6 Wochen. Wenn es auch in 14.04 benötigt wird, lassen Sie es mich bitte wissen, damit es zurĂŒckportiert werden kann.
@sforshee im Grunde frĂŒher (vor diesem Patch), das reproduziert werden konnte, indem man IPv6 im Kernel aktiviert (normalerweise standardmĂ€Ăig aktiviert), indem man "--userland-proxy=false" zu den Docker-Daemon-Flags hinzufĂŒgt und dann docker-stress -c 100
ausfĂŒhrt, for Beispiel (docker-stress stammt von hier: https://github.com/crosbymichael/docker-stress)
@fxposter danke. Wenn es dafĂŒr einen Fix gibt, muss ich mich nur darum kĂŒmmern, diesen Fix in den Ubuntu-Kernel zu integrieren. Ich kann auch helfen, andere Lecks zu untersuchen, die durch diesen Patch nicht behoben werden.
Ich habe dieses Problem auch. Ich fĂŒhre Docker in einer rancherOS-Box von AWS aus. TatsĂ€chlich geschieht dies zufĂ€llig, nachdem ein Rancher-Cluster (3 Hosts) eingerichtet und eine kleine Anwendung darin ausgefĂŒhrt wurde.
Das gleiche... Fedora 24, zufÀllig passieren, kann eine Woche lang in Ordnung sein, dann bekomme ich alle 10 Stunden einen
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
Erfahrung mit CentOS 7 mit Kernel 3.10.0-327.36.1.el7 und Docker 1.12.1
Ein Downgrade auf Kernel 3.10.0-327.18.2.el7, wÀhrend man auf Docker 1.12.1 bleibt, scheint das System stabilisiert zu haben.
Das sehe ich auch:
Docker-Version 1.11.2
Ubuntu 16.04.1 4.4.0-38-generisch
IPv6 deaktiviert (grub)
Hatte gerade dieses Problem ohne --userland-proxy=false
(sic!) auf einem Server mit Kernel 4.8.0-rc7, der den IPv6-Patch enthÀlt (sic!!). Vielleicht behebt es einige der Probleme, aber definitiv nicht alle.
WeiĂ jemand wie man das ĂŒberhaupt debuggen kann?
Wir haben festgestellt, dass dies bei unserem Setup nur auftritt, wenn wir (fast) keinen freien Speicher mehr haben.
@fxposter Es wĂ€re nĂŒtzlich, einen minimalen Reproduktionsfall zu finden, was ziemlich schwer ist :/ Dann könnten wir ftrace verwenden, um zumindest Codepfade zu finden.
Geschieht auf CoreOS 1081.5.0 (4.6.3-coreos)
Linux blade08 4.6.3-coreos #2 SMP Sat Jul 16 22:51:51 UTC 2016 x86_64 Intel(R) Xeon(R) CPU X5650 @ 2.67GHz GenuineIntel GNU/Linux
@LK4D4 leider ist es nicht mehr möglich, es ĂŒber Docker-Stress zu reproduzieren (zumindest konnte ich es nicht). Ich werde versuchen, unser vorheriges Setup mit Webkits nachzuahmen (die dieses Problem hĂ€ufiger ausgelöst haben, als mir lieb ist).
@fxposter Dieser Patch behebt nur einige der Probleme (aber in unserer Umgebung treten wir mit diesem Patch nie mehr auf), nicht alle, ich lasse meinen Kollegen dieses Problem weiter untersuchen. Wenn Sie eine Möglichkeit haben, dies zu reproduzieren, lassen Sie es mich bitte wissen, danke :)
Der Fix ist in 4.4.22 stabil https://cdn.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.4.22
Ich habe Redhat gebeten, diesen Patch auf Fedora 24 anzuwenden.
4.4.0-42 ist sicher noch kaputt...
Ich habe es hier fĂŒr Ubuntu erwĂ€hnt, aber vielleicht hat jemand eine bessere Idee:
https://bugs.launchpad.net/ubuntu/+source/linux-lts-xenial/+bug/1403152
Ich sehe das auch, Docker-Version 1.11.2, Build b9f10c9/1.11.2, 64bit Amazon Linux 2016.03 v2.1.6.
noch passiert. docker 1.12.2, armbian linux kernel 4.8.4, ipv6.disable=1 in bootargs
wie man den Fehler behebt, ich treffe ihn jeden Tag
@woshihaoren Benutze nicht --userland-proxy=false
Zur Verdeutlichung - wir haben es auch mit deaktiviertem Userland-Proxy konfrontiert
Erhalten Sie dies auf Amazon Linux AMI 2016.9:
$ uname -a
Linux 4.4.23-31.54.amzn1.x86_64 #1 SMP
Docker-Version:
``` Kunde:
Version: 1.11.2
API-Version: 1.23
Go-Version: go1.5.3
Git-Commit: b9f10c9/1.11.2
Gebaut:
Betriebssystem/Arch: linux/amd64
Server:
Version: 1.11.2
API-Version: 1.23
Go-Version: go1.5.3
Git-Commit: b9f10c9/1.11.2
Gebaut:
Betriebssystem/Arch: linux/amd64
```
centos7-Kernel 4.4.30 wieder~~~~
CoreOS 1185.3.0, 4.7.3-coreos-r2, Docker 1.11.2
Reproduzierbar, wenn nur 10..20 debian :jessie- Container mit "apt-get update" als Befehl ausgefĂŒhrt werden.
CoreOS Stable ist derzeit noch angeschlagen. Der Fix fĂŒr die 4.7-Serie ist in 4.7.5: https://cdn.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.7.5
commit 4e1b3aa898ea93ec10e48c06f0e511de37c35b2d
Author: Wei Yongjun <[email protected]>
Date: Mon Sep 5 16:06:31 2016 +0800
ipv6: addrconf: fix dev refcont leak when DAD failed
TL;DR - In diesem Beitrag gibt es keine Lösungen, aber ich liste auf, was ich bisher verfolgt habe und meine aktuellen Arbeitstheorien. Ich hoffe, dass andere Leute, die das auch verfolgen, einige Informationen hier hilfreich finden, wÀhrend wir dieses Ding herunterfahren.
@koendc Danke fĂŒr die Veröffentlichung des Patches, der in 4.7.5 eingefĂŒhrt wurde. Ich habe den Patch 4e1b3aa898ea93ec10e48c06f0e511de37c35b2d (upstream 751eb6b6042a596b0080967c1a529a9fe98dac1d) auf mein 4.5.5-Setup [1] zurĂŒckportiert und konnte das Problem unregister_netdevice problemlos reproduzieren. Es ist möglich, dass andere Ănderungen im 4.7.x-Kernel mit dem bereitgestellten Patch zusammenwirken, um dieses Problem zu beheben, aber ich habe das noch nicht bestĂ€tigt, also sollten wir noch nicht alle Hoffnung verlieren. Ich teste mit 4.5.5, weil ich einen reproduzierbaren Testfall habe, der das in [2] beschriebene Problem verursacht.
Andere Dinge, die ich aufgrund von Tests bestÀtigt habe:
NĂ€chste Schritte:
IPv6: eth0: IPv6 duplicate address <blah> detected
Fehlern. Könnte ein weiterer Ablenkungsmanöver sein, aber ich möchte versuchen, IPv6 zu deaktivieren, um zu sehen, ob es einen Zusammenhang gibt[1] Mein vollstÀndiges Setup ist ein GCE virt, auf dem ein leicht angepasster Debian-Kernel basierend auf 4.5.5
. Docker version 1.8.3, build f4bf5c7
lÀuft noch dazu
[2] Testfall-Informationen: Ich habe 20 parallele Prozesse, die jeweils einen Node.js- Hello-World- Server in einem Docker-Container starten. Anstatt hello world
, gibt der Node.js-Server 1 MB zufĂ€lligen Text zurĂŒck. Der ĂŒbergeordnete Prozess befindet sich in einer engen Schleife, die den Container startet, sich zusammenrollt, um die 1 MB an Daten abzurufen, und den Container stoppt. Mit diesem Setup kann ich das Problem in 4-90s konsistent reproduzieren. Die Verwendung desselben Setups auf einem physischen Host oder innerhalb der Virtualbox reproduziert das Problem nicht, trotz unterschiedlicher Elemente, die die mittlere Zeit bis zur Reproduktion auf der GCE-Box Ă€ndern. Variablen, mit denen ich gespielt habe: Anzahl gleichzeitiger Testprozesse, GröĂe der ĂŒbertragenen Nutzlast und Anzahl der curl-Aufrufe. Die ersten beiden Variablen sind definitiv korreliert, obwohl ich denke, dass es wahrscheinlich nur um die Anpassung der Variablen geht, um einen vernĂŒnftigen SĂ€ttigungspunkt fĂŒr die virt zu finden.
Auch ich habe diesen Fehler.
Ich sehe, dass es nach dem Bereitstellen eines Containers dreimal wiederholt wird.
Beschreibung
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
Schritte zum Reproduzieren des Problems:
docker run -d --network=anetwork --name aname -p 9999:80 aimagename
Beschreiben Sie die Ergebnisse, die Sie erhalten haben:
Lass den Fehler einfach 3 mal wiederholen.
Beschreiben Sie die erwarteten Ergebnisse:
Kein Fehler
ZusĂ€tzliche Informationen, die Sie fĂŒr wichtig erachten (z. B. ein Problem tritt nur gelegentlich auf):
Hat erst nach diesem Wochenende angefangen.
Ausgabe von docker version
:
docker --version
Docker version 1.12.3, build 6b644ec
Ausgabe von docker info
:
docker info
Containers: 10
Running: 9
Paused: 0
Stopped: 1
Images: 16
Server Version: 1.12.3
Storage Driver: overlay2
Backing Filesystem: extfs
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: overlay null host bridge
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options: seccomp
Kernel Version: 4.8.4-200.fc24.x86_64
Operating System: Fedora 24 (Server Edition)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 15.67 GiB
Name: docker-overlayfs
ID: AHY3:COIU:QQDG:KZ7S:AUBY:SJO7:AHNB:3JLM:A7RN:57CQ:G56Y:YEVU
Docker Root Dir: /docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Insecure Registries:
127.0.0.0/8
ZusÀtzliche Umgebungsdetails (AWS, VirtualBox, physisch usw.):
Virtuelle Maschine:
Fedora 24
OverlayFS2 auf ext3
Separates Laufwerk, das fĂŒr die Docker-Nutzung 24Â Gigs zugewiesen ist.
16 Gig RAM.
Docker PS
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5664a10de50b 7f01d324a3cb "/bin/sh -c 'apk --no" 11 minutes ago Exited (1) 10 minutes ago pensive_brattain
3727b3e57e2f paa-api "/bin/sh -c /run.sh" 10 days ago Up 10 days 0.0.0.0:8080->80/tcp paa-api
43cfe7eae9cf paa-ui "nginx -g 'daemon off" 10 days ago Up 10 days 0.0.0.0:80->80/tcp, 443/tcp paa-ui
345eaab3b289 sentry "/entrypoint.sh run w" 11 days ago Up 11 days 0.0.0.0:8282->9000/tcp my-sentry
32e555609cd2 sentry "/entrypoint.sh run w" 11 days ago Up 11 days 9000/tcp sentry-worker-1
a411d09d7f98 sentry "/entrypoint.sh run c" 11 days ago Up 11 days 9000/tcp sentry-cron
7ea48b27eb85 postgres "/docker-entrypoint.s" 11 days ago Up 11 days 5432/tcp sentry-postgres
116ad8850bb1 redis "docker-entrypoint.sh" 11 days ago Up 11 days 6379/tcp sentry-redis
35ee0c906a03 uifd/ui-for-docker "/ui-for-docker" 11 days ago Up 11 days 0.0.0.0:9000->9000/tcp docker-ui
111ad12b877f elasticsearch "/docker-entrypoint.s" 11 days ago Up 11 days 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp paa-elastic
Docker-Images
docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 7f01d324a3cb 12 minutes ago 88.51 MB
<none> <none> 1a6a12354032 12 minutes ago 88.51 MB
debian jessie 73e72bf822ca 6 days ago 123 MB
paa-api latest 6da68e510175 10 days ago 116.9 MB
<none> <none> 4c56476ba36d 10 days ago 116.9 MB
<none> <none> 3ea3bff63c7b 10 days ago 116.8 MB
<none> <none> 05d6d5078f8a 10 days ago 88.51 MB
<none> <none> 30f0e6001f1e 10 days ago 88.51 MB
paa-ui latest af8ff5acc85a 10 days ago 188.1 MB
elasticsearch latest 5a62a28797b3 12 days ago 350.1 MB
sentry latest 9ebeda6520cd 13 days ago 493.7 MB
redis latest 74b99a81add5 13 days ago 182.9 MB
python alpine 8dd7712cca84 13 days ago 88.51 MB
postgres latest 0267f82ab721 13 days ago 264.8 MB
nginx latest e43d811ce2f4 3 weeks ago 181.5 MB
uifd/ui-for-docker latest 965940f98fa5 9 weeks ago 8.096 MB
Docker-Volume Ls
DRIVER VOLUME NAME
local 3bc848cdd4325c7422284f6898a7d10edf8f0554d6ba8244c75e876ced567261
local 6575dad920ec453ca61bd5052cae1b7e80197475b14955115ba69e8c1752cf18
local bf73a21a2f42ea47ce472e55ab474041d4aeaa7bdb564049858d31b538bad47b
local c1bf0761e8d819075e8e2427c29fec657c9ce26bc9c849548e10d64eec69e76d
local e056bce5ae34f4066d05870365dcf22e84cbde8d5bd49217e3476439d909fe44
*DF-H *
df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 7.9G 0 7.9G 0% /dev
tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs 7.9G 1.3M 7.9G 1% /run
tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
/dev/mapper/fedora-root 11G 1.6G 8.7G 16% /
tmpfs 7.9G 8.0K 7.9G 1% /tmp
/dev/sda1 477M 130M 319M 29% /boot
/dev/sdb1 24G 1.6G 21G 7% /docker
overlay 24G 1.6G 21G 7% /docker/overlay2/5591cfec27842815f5278112edb3197e9d7d5ab508a97c3070fb1a149d28f9f0/merged
shm 64M 0 64M 0% /docker/containers/35ee0c906a03422e1b015c967548582eb5ca3195b3ffdd040bb80df9bb77cd32/shm
overlay 24G 1.6G 21G 7% /docker/overlay2/73e795866566e845f09042d9f7e491e8c3ac59ebd7f5bc0ee4715d0f08a12b7b/merged
shm 64M 4.0K 64M 1% /docker/containers/7ea48b27eb854e769886f3b662c2031cf74f3c6f77320a570d2bfa237aef9d2b/shm
overlay 24G 1.6G 21G 7% /docker/overlay2/fad7f3b483bc48b83c3a729368124aaaf5fdd7751fe0a383171b8966959ac966/merged
shm 64M 0 64M 0% /docker/containers/116ad8850bb1c74d1a33b6416e1b99775ef40aa13fc098790b7e4ea07e3e6075/shm
overlay 24G 1.6G 21G 7% /docker/overlay2/456c40bc86852c9f9c9ac737741b57d30f2167882f15b32ac25f42048648d945/merged
shm 64M 0 64M 0% /docker/containers/a411d09d7f98e1456a454a399fb68472f5129df6c3bd0b73f59236e6f1e55e74/shm
overlay 24G 1.6G 21G 7% /docker/overlay2/3ee2b1b978b048f4d80302eec129e7163a025c7bb8e832a29567b64f5d15baa0/merged
shm 64M 0 64M 0% /docker/containers/32e555609cd2c77a1a8efc45298d55224f15988197ef47411a90904cf3e13910/shm
overlay 24G 1.6G 21G 7% /docker/overlay2/3e1cdabc2ae422a84b1d4106af1dde0cd670392bbe8a9d8f338909a926026b73/merged
shm 64M 0 64M 0% /docker/containers/345eaab3b289794154af864e1d14b774cb8b8beac8864761ac84051416c7761b/shm
overlay 24G 1.6G 21G 7% /docker/overlay2/6bfc33084abe688af9c1a704a0daba496bee7746052103ef975c76d2c74d6455/merged
shm 64M 0 64M 0% /docker/containers/111ad12b877f4d4d8b3ab4b44b06f645acf89b983580e93d441305dcc7926671/shm
overlay 24G 1.6G 21G 7% /docker/overlay2/0b454336447a39d06966adedf4dc4abed6405212107a2f8f326072ae5fb58b3d/merged
shm 64M 0 64M 0% /docker/containers/43cfe7eae9cf310d64c6fe0f133152067d88f8d9242e48289148daebd9cb713d/shm
overlay 24G 1.6G 21G 7% /docker/overlay2/0d8bba910f1f5e928a8c1e5d02cc55b6fe7bd7cd5c4d23d4abc6f361ff5043ac/merged
shm 64M 0 64M 0% /docker/containers/3727b3e57e2f5c3b7879f
DF -i
df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
devtmpfs 2051100 411 2050689 1% /dev
tmpfs 2054171 1 2054170 1% /dev/shm
tmpfs 2054171 735 2053436 1% /run
tmpfs 2054171 16 2054155 1% /sys/fs/cgroup
/dev/mapper/fedora-root 5402624 53183 5349441 1% /
tmpfs 2054171 8 2054163 1% /tmp
/dev/sda1 128016 350 127666 1% /boot
/dev/sdb1 1572864 72477 1500387 5% /docker
overlay 1572864 72477 1500387 5% /docker/overlay2/5591cfec27842815f5278112edb3197e9d7d5ab508a97c3070fb1a149d28f9f0/merged
shm 2054171 1 2054170 1% /docker/containers/35ee0c906a03422e1b015c967548582eb5ca3195b3ffdd040bb80df9bb77cd32/shm
overlay 1572864 72477 1500387 5% /docker/overlay2/73e795866566e845f09042d9f7e491e8c3ac59ebd7f5bc0ee4715d0f08a12b7b/merged
shm 2054171 2 2054169 1% /docker/containers/7ea48b27eb854e769886f3b662c2031cf74f3c6f77320a570d2bfa237aef9d2b/shm
overlay 1572864 72477 1500387 5% /docker/overlay2/fad7f3b483bc48b83c3a729368124aaaf5fdd7751fe0a383171b8966959ac966/merged
shm 2054171 1 2054170 1% /docker/containers/116ad8850bb1c74d1a33b6416e1b99775ef40aa13fc098790b7e4ea07e3e6075/shm
overlay 1572864 72477 1500387 5% /docker/overlay2/456c40bc86852c9f9c9ac737741b57d30f2167882f15b32ac25f42048648d945/merged
shm 2054171 1 2054170 1% /docker/containers/a411d09d7f98e1456a454a399fb68472f5129df6c3bd0b73f59236e6f1e55e74/shm
overlay 1572864 72477 1500387 5% /docker/overlay2/3ee2b1b978b048f4d80302eec129e7163a025c7bb8e832a29567b64f5d15baa0/merged
shm 2054171 1 2054170 1% /docker/containers/32e555609cd2c77a1a8efc45298d55224f15988197ef47411a90904cf3e13910/shm
overlay 1572864 72477 1500387 5% /docker/overlay2/3e1cdabc2ae422a84b1d4106af1dde0cd670392bbe8a9d8f338909a926026b73/merged
shm 2054171 1 2054170 1% /docker/containers/345eaab3b289794154af864e1d14b774cb8b8beac8864761ac84051416c7761b/shm
overlay 1572864 72477 1500387 5% /docker/overlay2/6bfc33084abe688af9c1a704a0daba496bee7746052103ef975c76d2c74d6455/merged
shm 2054171 1 2054170 1% /docker/containers/111ad12b877f4d4d8b3ab4b44b06f645acf89b983580e93d441305dcc7926671/shm
overlay 1572864 72477 1500387 5% /docker/overlay2/0b454336447a39d06966adedf4dc4abed6405212107a2f8f326072ae5fb58b3d/merged
shm 2054171 1 2054170 1% /docker/containers/43cfe7eae9cf310d64c6fe0f133152067d88f8d9242e48289148daebd9cb713d/shm
overlay 1572864 72477 1500387 5% /docker/overlay2/0d8bba910f1f5e928a8c1e5d02cc55b6fe7bd7cd5c4d23d4abc6f361ff5043ac/merged
shm 2054171 1 2054170 1% /docker/containers/3727b3e57e2f5c3b7879f23deb3b023d10c0b766fe83e21dd389c71021af371f/shm
tmpfs 2054171 5 2054166 1% /run/user/0
Kostenlos -lmh
free -lmh
total used free shared buff/cache available
Mem: 15G 3.0G 10G 19M 2.7G 12G
Low: 15G 5.6G 10G
High: 0B 0B 0B
Swap: 1.2G 0B 1.2G
FĂŒr alle Interessierten fĂŒhren wir (Travis CI) ein Upgrade auf v4.8.7
auf Ubuntu 14.04 ein. Unsere Lasttests zeigten keine Vorkommen des hier beschriebenen Fehlers. Zuvor haben wir linux-image-generic-lts-xenial auf Ubuntu 14.04 ausgefĂŒhrt. Ich plane, in naher Zukunft einen Blog-Beitrag zu veröffentlichen, in dem mehr Details beschrieben werden.
UPDATE : Ich hĂ€tte erwĂ€hnen sollen, dass wir diesen Docker-Stack ausfĂŒhren:
Client:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built: Wed Oct 26 21:44:32 2016
OS/Arch: linux/amd64
Server:
Version: 1.12.3
API version: 1.24
Go version: go1.6.3
Git commit: 6b644ec
Built: Wed Oct 26 21:44:32 2016
OS/Arch: linux/amd64
UPDATE : Wir sehen diesen Fehler _noch_ in der Produktion auf Ubuntu Trusty + Kernel v4.8.7. Wir wissen noch nicht, warum diese Fehler in Staging-Lasttests verschwanden, die den Fehler zuvor reproduzierten, aber die Fehlerrate in der Produktion ist praktisch dieselbe. VorwÀrts und aufwÀrts. Wir haben die "automatische Implosion" aufgrund dieses Fehlers aufgrund der hohen Instanzumwandlungsrate deaktiviert.
auch gefunden in Centos 7
Message from syslogd@c31392666b98e49f6ace8ed65be337210-node1 at Nov 17 17:28:07 ...
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
Message from syslogd@c31392666b98e49f6ace8ed65be337210-node1 at Nov 17 17:32:47 ...
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
Message from syslogd@c31392666b98e49f6ace8ed65be337210-node1 at Nov 17 17:37:32 ...
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
Message from syslogd@c31392666b98e49f6ace8ed65be337210-node1 at Nov 17 17:37:42 ...
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
[root@c31392666b98e49f6ace8ed65be337210-node1 ~]# docker info
Containers: 19
Running: 15
Paused: 0
Stopped: 4
Images: 23
Server Version: 1.11.2.1
Storage Driver: overlay
Backing Filesystem: extfs
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local nas acd ossfs
Network: vpc bridge null host
Kernel Version: 4.4.6-1.el7.elrepo.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 7.795 GiB
Name: c31392666b98e49f6ace8ed65be337210-node1
ID: WUWS:FDP5:TNR6:EE5B:I2KI:O4IT:TQWF:4U42:5327:7I5K:ATGT:73KM
Docker Root Dir: /var/lib/docker
Debug mode (client): false
Debug mode (server): false
Registry: https://index.docker.io/v1/
WARNING: bridge-nf-call-ip6tables is disabled
Cluster store: etcd://test.com:2379
Cluster advertise: 192.168.0.2:2376
Das Gleiche passiert hier mit einem DigitalOcean-VPS beim Debian-Testen:
# journalctl -p0 | tail -15
Nov 19 12:02:55 hostname kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
Nov 19 12:03:05 hostname kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
Nov 19 12:17:44 hostname kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
Nov 19 12:48:15 hostname kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
Nov 19 13:33:08 hostname kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
Nov 19 14:03:04 hostname kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
Nov 19 14:03:14 hostname kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
Nov 19 14:17:59 hostname kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
Nov 19 15:03:02 hostname kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
Nov 19 15:18:13 hostname kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
Nov 19 15:32:44 hostname kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
Nov 19 16:03:13 hostname kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
Nov 19 16:47:43 hostname kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
Nov 19 17:17:46 hostname kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
Nov 19 17:17:56 hostname kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
System
$ apt list --installed 'linux-image*'
Listing... Done
linux-image-3.16.0-4-amd64/now 3.16.36-1+deb8u2 amd64 [installed,local]
linux-image-4.8.0-1-amd64/testing,now 4.8.5-1 amd64 [installed,automatic]
linux-image-amd64/testing,now 4.8+76 amd64 [installed]
$ apt list --installed 'docker*'
Listing... Done
docker-engine/debian-stretch,now 1.12.3-0~stretch amd64 [installed]
N: There are 22 additional versions. Please use the '-a' switch to see them.
$ uname -a
Linux hostname 4.8.0-1-amd64 #1 SMP Debian 4.8.5-1 (2016-10-28) x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux testing (stretch)
Release: testing
Codename: stretch
$ docker info
Containers: 1
Running: 1
Paused: 0
Stopped: 0
Images: 42
Server Version: 1.12.3
Storage Driver: devicemapper
Pool Name: docker-254:1-132765-pool
Pool Blocksize: 65.54 kB
Base Device Size: 10.74 GB
Backing Filesystem: ext4
Data file: /dev/loop0
Metadata file: /dev/loop1
Data Space Used: 435 MB
Data Space Total: 107.4 GB
Data Space Available: 16.96 GB
Metadata Space Used: 1.356 MB
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.146 GB
Thin Pool Minimum Free Space: 10.74 GB
Udev Sync Supported: true
Deferred Removal Enabled: false
Deferred Deletion Enabled: false
Deferred Deleted Device Count: 0
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
WARNING: Usage of loopback devices is strongly discouraged for production use. Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Library Version: 1.02.136 (2016-11-05)
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: null host bridge overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options: seccomp
Kernel Version: 4.8.0-1-amd64
Operating System: Debian GNU/Linux stretch/sid
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 996.4 MiB
Name: hostname
ID: <redacted>
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
WARNING: No swap limit support
Insecure Registries:
127.0.0.0/8
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0b54ed86ba70 squid/production "/usr/sbin/squid -N" 29 hours ago Up 29 hours 0.0.0.0:8080-8081->8080-8081/tcp squid
$ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether de:ad:be:ff:ff:ff brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether de:ad:be:ff:ff:ff brd ff:ff:ff:ff:ff:ff
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
link/ether de:ad:be:ff:ff:ff brd ff:ff:ff:ff:ff:ff
234: veth64d2a77<strong i="12">@if233</strong>: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT group default
link/ether de:ad:be:ff:ff:ff brd ff:ff:ff:ff:ff:ff link-netnsid 1
# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 dead::beef:dead:beef:ffff prefixlen 64 scopeid 0x20<link>
ether de:ad:be:ef:ff:ff txqueuelen 0 (Ethernet)
RX packets 3095526 bytes 1811946213 (1.6 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2642391 bytes 1886180372 (1.7 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 123.45.67.89 netmask 255.255.240.0 broadcast 123.45.67.89
inet6 dead::beef:dead:beef:ffff prefixlen 64 scopeid 0x0<global>
inet6 dead::beef:dead:beef:ffff prefixlen 64 scopeid 0x20<link>
ether dead::beef:dead:beef:ffff txqueuelen 1000 (Ethernet)
RX packets 3014258 bytes 2087556505 (1.9 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3453430 bytes 1992544469 (1.8 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 178 bytes 15081 (14.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 178 bytes 15081 (14.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
veth64d2a77: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 dead::beef:dead:beef:ffff prefixlen 64 scopeid 0x20<link>
ether d2:00:ac:07:c8:45 txqueuelen 0 (Ethernet)
RX packets 1259405 bytes 818486790 (780.5 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1103375 bytes 817423202 (779.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Ich habe 4.8.8 in einer engen Schleife (siehe [2] aus meinem frĂŒheren Kommentar zum Testfall) die letzten 4 Tage ununterbrochen getestet. So weit, ist es gut.
Fakten
Vermutungen
@meatballhat wies darauf hin, dass auf ihren Produktionsservern das Problem beim AusfĂŒhren von 4.8.7 aufgetreten ist. Damit bleiben uns zwei Möglichkeiten:
Können wir einige Leute dazu bringen, 4.8.8 auszuprobieren, um zu sehen, ob sie dieses Problem reproduzieren können?
@reshen Ich werde uns auf 4.8.8 aktualisieren und berichten :+1: Vielen Dank fĂŒr Ihre Recherche!
@reshen Hervorragende Recherche. Auch unter Linux 4.8.8 auf Xubuntu 16.04 konnte ich das Problem bisher nicht reproduzieren.
Ich habe die Ubuntu-Mainline-Kernel-Builds verwendet . Ich habe keinen gut definierten Testfall, aber ich konnte das Problem vorher konsequent reproduzieren, indem ich die Docker-Container, mit denen ich arbeite, starte und stoppte.
Um Linux 4.8.8 zu testen, war es fĂŒr mich am einfachsten, von aufs zu overlay2 als Speichertreiber zu wechseln, da die Mainline-Kernel-Builds aufs nicht enthalten. Ich glaube nicht, dass dies den Test beeinflusst, aber es sollte beachtet werden.
In der Vergangenheit habe ich Linux 4.4.4 mit dem von Dan Streetman zurĂŒckportierten 751eb6b6 getestet, dies schien das Problem fĂŒr mich nicht zu verringern. Es wird interessant sein zu sehen, ob auch das ZurĂŒckportieren der beiden von Ihnen notierten Patches (5086cadf und 6fff1319) das gleiche Ergebnis wie 4.4.8 liefern kann.
Ubuntu 16.04 mit 4.4.0-47 war immer noch betroffen... probiere jetzt 4.4.0-49, werde spÀter berichten.
edit: 2016-11-28: -49 zeigt diese Protokollzeile in dmesg an.
Habe dies auf Fedora 25 (Kernel 4.8.8) und Docker 1.12.3 erlebt
Zu Ihrer Information: Wir haben Linux 4.8.8 in Verbindung mit Docker v1.12.3 auf einem einzigen Produktionshost ausgefĂŒhrt. Die Betriebszeit betrĂ€gt derzeit 5,5 Tage und die Maschine bleibt stabil.
Wir sehen gelegentlich eine Handvoll unregister_netdevice: waiting for lo to become free. Usage count = 1
Meldungen im Syslog, aber im Gegensatz zu frĂŒher stĂŒrzt der Kernel nicht ab und die Meldung verschwindet. Ich vermute, dass eine der anderen Ănderungen, die entweder im Kernel oder in Docker eingefĂŒhrt wurden, diesen Zustand erkennt und sich jetzt davon erholt. FĂŒr uns ist diese Meldung nun zwar Ă€rgerlich, aber kein kritischer Fehler mehr.
Ich hoffe, einige andere Leute können das oben genannte auf ihren Produktionsflotten bestÀtigen.
@gtirloni - können Sie klĂ€ren, ob Ihr 4.8.8/1.12.3-Computer abgestĂŒrzt ist oder ob Sie die Nachricht gerade gesehen haben?
Vielen Dank im Voraus an alle, die daran gearbeitet haben, nĂŒtzliche Informationen zu reproduzieren/zur VerfĂŒgung zu stellen, um dieses Ding zu triangulieren.
Wir löschen das GegenstĂŒck der veth-Schnittstelle (docker0) nach dem Starten von Docker und starten Docker danach neu, wenn wir den Host mit ansible bereitstellen. Problem ist seitdem nicht aufgetreten.
Ich erhalte denselben Fehler auch auf einem Raspberry Pi 2, auf dem Raspbian mit Docker ausgefĂŒhrt wird.
Kernel-Info
Linux rpi2 4.4.32-v7+ #924 SMP Tue Nov 15 18:11:28 GMT 2016 armv7l GNU/Linux
Docker-Info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 9
Server Version: 1.12.3
Storage Driver: overlay
Backing Filesystem: extfs
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: null host bridge overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options:
Kernel Version: 4.4.32-v7+
Operating System: Raspbian GNU/Linux 8 (jessie)
OSType: linux
Architecture: armv7l
CPUs: 4
Total Memory: 925.5 MiB
Name: rpi2
ID: 24DC:RFX7:D3GZ:YZXF:GYVY:NXX3:MXD3:EMLC:JPLN:7I6I:QVQ7:M3NX
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
WARNING: No swap limit support
WARNING: No kernel memory limit support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support
WARNING: No cpuset support
Insecure Registries:
127.0.0.0/8
Dies geschah, nachdem ein Container erstellt wurde, der etwa 50 MB heruntergeladener Programme benötigte.
Nur ein Neustart wĂŒrde mich die Maschine wieder benutzen lassen
Ich sehe dies tatsĂ€chlich unter Amazon Linux in einem ECS-Cluster - die Nachricht wird gelegentlich ausgelöst, aber sie stĂŒrzt nicht ab, wie es Reshen jetzt sieht. Docker 1.11.2. Uname meldet als Version "4.4.14-24.50.amzn1.x86_64".
@reshen Ich werde dieses Wochenende 4.8.8 auf meinem Laptop bauen und sehen, ob das so ist
behebt es fĂŒr mich!
á§
Am Do, 1. Dezember 2016 um 10:29 Uhr, Ernest Mueller [email protected]
schrieb:
Ich sehe dies tatsÀchlich auf Amazon Linux in einem ECS-Cluster - die Nachricht
wirft gelegentlich, aber es schlieĂt nicht ab, wie es Reshen jetzt sieht.
Docker 1.11.2. Uname meldet als Version "4.4.14-24.50.amzn1.x86_64".â
Sie erhalten dies, weil Sie diesen Thread abonniert haben.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/docker/docker/issues/5618#issuecomment-264220432 oder stumm
der Faden
https://github.com/notifications/unsubscribe-auth/AKklVRqoBUZDu3HMhGv3b6knnA6j6C_Qks5rDvXRgaJpZM4B4L4Z
.
--
Keifer FĂŒrzland
http://kfrz.work
Ich konnte dieses Problem auch mit https://github.com/crosbymichael/docker-stress auf einem Kubernetes-Worker-Knoten mit CoreOS Stable 1185.3.0 reproduzieren.
AusfĂŒhren von docker_stress_linux_amd64 -k 3s -c 5 --containers 1000
: 5 gleichzeitige Worker, die Container erstellen/löschen, maximale Lebensdauer von Containern = 3s, Erstellen von bis zu 1000 Containern auf einer m4.large-Instanz auf AWS wĂŒrde den Docker-Daemon nach etwa drei Minuten nicht mehr reagieren lassen.
Auf CoreOS Beta 1235.1.0 aktualisiert und ich konnte es nicht reproduzieren (sowohl die Nicht-Reaktion als auch die unregister_netdevice
Meldung in den Kernel-Logs). WĂ€hrend das AusfĂŒhren von 5 gleichzeitigen docker_stress-Workern CoreOS Stable nach wenigen Minuten beenden wĂŒrde, konnte ich mit 10 und 15 gleichzeitigen Workern bis zum Abschluss des Tests mit CoreOS Beta laufen.
CoreOS wird in "KanÀlen" veröffentlicht, sodass es nicht möglich ist, den Kernel isoliert zu aktualisieren. Hier sind die Hauptunterschiede zwischen Stable und Beta:
Dieses Problem wird in Amazon Elastic Beanstalk mit 4.4.23-31.54.amzn1.x86_64 angezeigt
Passieren Sie einfach auf CoreOS Stable 1185.5.0, Docker 1.12.2
Nach einem Neustart ist alles in Ordnung
Update: Das Problem mit dem hĂ€ngenden Docker-Daemon ist auf einem Host mit CoreOS Beta 1235.1.0 mit Docker v1.12.3 und Linux-Kernel v4.8.6 erneut aufgetreten. đą
1.12.4 und 1.13 sollten theoretisch nicht einfrieren, wenn dieses Kernelproblem auftritt.
Der Grund fĂŒr das Einfrieren des Docker-Daemons liegt darin, dass der Daemon auf eine Netlink-Nachricht vom Kernel wartet (die nie kommen wird), wĂ€hrend er die Sperre fĂŒr das Container-Objekt hĂ€lt.
1.12.4 und 1.13 setzen einen Timeout fĂŒr diese Netlink-Anforderung, um zumindest die Containersperre aufzuheben.
Dadurch wird das Problem __nicht__ behoben , aber zumindest (hoffentlich) friert nicht der gesamte Daemon ein.
Sie werden wahrscheinlich nicht in der Lage sein, neue Container zu starten, und Sie werden sie wahrscheinlich auch nicht abreiĂen können, da es so aussieht, als ob alle Interaktionen mit Netlink stagnieren, sobald dieses Problem auftritt.
@cpuguy83 FWIW, alle laufenden Container werden weiterhin ohne
Dies behebt das Problem nicht, aber zumindest (hoffentlich) friert nicht der gesamte Daemon ein.
Der einzige Vorteil des ganzen Daemons, der eingefroren ist, ist, dass er leicht herauszufinden ist. Kubernetes kann den Knoten entfernen, vielleicht sogar automatisch neu starten. Sollte der Daemon einfach weiterlaufen, wÀre es dann noch möglich, das aufgetretene Kernel-Problem zu finden?
@seanknox Ich könnte Ihnen ein benutzerdefiniertes CoreOS 1248.1.0 AMI mit gepatchtem Docker (CoreOS Docker 1.12.3 + Upstream 1.12.4-rc1-Patches) zur VerfĂŒgung stellen. Auf meinen CoreOS/K8s-Clustern wurden alle paar Stunden AufhĂ€ngungen behoben. Pingen Sie mich einfach mit Ihrer AWS Account-ID auf Deis Slack an.
Wir haben groĂe Probleme mit diesem Problem auf unserem CoreOS-Cluster. Kann jemand sagen wann es endlich behoben wird? Wir trĂ€umen von diesem Moment, in dem wir nachts schlafen können.
@DenisIzmaylov Wenn Sie --userland-proxy=false
nicht festlegen, sollten Sie im Allgemeinen nicht auf dieses Problem stoĂen .
Aber ansonsten ist dies ein Fehler im Kernel, möglicherweise mehrere Kernel-Fehler, von denen einige sagen, dass sie in 4.8 behoben sind und andere nicht. FĂŒr einige scheint das Deaktivieren von IPv6 das Problem zu beheben, andere nicht (daher sind es wahrscheinlich mehrere Probleme ... oder zumindest mehrere Ursachen).
Ich habe dieses Problem innerhalb von Stunden auf Hochlastsystemen mit und ohne --userland-proxy=false
BestÀtigt, dass wir immer noch unregister_netdevice
Fehler in Kernel 4.8.12 sehen . Es dauert etwa 5 Tage, um auszulösen. Nur ein Neustart des Systems scheint das Problem zu beheben. Das Stoppen von Docker scheint auf unbestimmte Zeit zu hÀngen.
Habe den IPv6-Trick fĂŒr den Kernel-Boot noch nicht ausprobiert.
Containers: 17
Running: 14
Paused: 0
Stopped: 3
Images: 121
Server Version: 1.10.3
Storage Driver: overlay
Backing Filesystem: extfs
Execution Driver: native-0.2
Logging Driver: json-file
Plugins:
Volume: local
Network: bridge null host
Kernel Version: 4.8.12-1.el7.elrepo.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 24
Total Memory: 62.86 GiB
Name: **REDACTED***
ID: **REDACTED***
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
WÀre genial, wenn jemand dies mit 1.12.5 versuchen könnte, was jetzt bei der hÀngenden Netlink-Anfrage ein Timeout haben sollte, anstatt nur Docker zu hÀngen.
@ cpuguy83 jedoch ist das System in diesem Zustand immer noch unbrauchbar :)
@LK4D4 Oh, total, ich möchte nur diese Timeouts sehen;)
Beheben dieses Problems unter Cent OS 7:
kernel:unregister_netdevice : Warten, bis lo frei wird. Nutzungsanzahl = 1
Linux foo 3.10.0-514.2.2.el7.x86_64 #1 SMP Di 6. Dezember 23:06:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
docker-engine-1.12.5-1.el7.centos.x86_64
Dies wirkt sich auf meine CI-Builds aus, die in Docker-Containern ausgefĂŒhrt werden und plötzlich zu sterben scheinen, wĂ€hrend diese Konsolenmeldung angezeigt wird. Gibt es eine Lösung oder einen Workaround? Danke!
@ cpuguy83 Docker hĂ€ngt fĂŒr mich nicht, wenn dieser Fehler auftritt, aber die Container werden getötet, was in meiner Situation meine Jenkins / CI-Jobs unterbricht.
Also habe ich Docker fĂŒr eine Weile (11 Monate?) ohne Probleme auf einem Centos 7-Rechner ausgefĂŒhrt. Heute habe ich beschlossen, den TCP-Listening-Daemon auszuprobieren ( die TCP-Listening-Adresse wurde zu /etc/sysconfig/docker hinzugefĂŒgt ) und habe gerade diesen Fehler erhalten.
kernel:unregister_netdevice : Warten, bis lo frei wird. Nutzungsanzahl = 1
meine Nutzungsanzahl ist also nicht 3.
BehÀlter: 4
Laufen: 3
Angehalten: 0
Gestoppt: 1
Bilder: 67
Serverversion: 1.10.3
Speichertreiber: btrfs
Build-Version: Btrfs v4.4.1
Bibliotheksversion: 101
AusfĂŒhrungstreiber: native-0.2
Protokollierungstreiber: json-Datei
Plugins:
LautstÀrke: lokal
Netzwerk: Null-Host ĂŒberbrĂŒcken
Kernel-Version: 3.10.0-514.2.2.el7.x86_64
Betriebssystem: CentOS Linux 7 (Kern)
Betriebssystemtyp: Linux
Architektur: x86_64
Anzahl Docker-Haken: 2
CPUs: 24
Gesamtspeicher: 39,12 GiB
Name: aimes-web-encoder
ID: QK5Q: JCMA:ATGR :ND6W:YOT4:PZ7G:DBV5:PR26: YZQL:INRU : HAUC:CQ6B
Registrierungen: docker.io (sicher)
3.10.0-514.2.2.el7.x86_64 #1 SMP Di 6. Dez. 23:06:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Klient:
Version: 1.10.3
API-Version: 1.22
Paketversion: docker-common-1.10.3-59.el7.centos.x86_64
Go-Version: go1.6.3
Git-Commit: 3999ccb-nicht unterstĂŒtzt
Gebaut: Do 15. Dez 17:24:43 2016
Betriebssystem/Arch: linux/amd64
Server:
Version: 1.10.3
API-Version: 1.22
Paketversion: docker-common-1.10.3-59.el7.centos.x86_64
Go-Version: go1.6.3
Git-Commit: 3999ccb-nicht unterstĂŒtzt
Gebaut: Do 15. Dez. 17:24:43 Uhr 2016
Betriebssystem/Arch: linux/amd64
Ich kann @aamerik bestĂ€tigen. Ich sehe das gleiche Problem bei der gleichen Kernel-Version. Keine gröĂeren Ănderungen in letzter Zeit am System, dieses Problem seit heute.
Ich habe dieselbe kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
Meldung auf meinem CentOS 7-Computer gesehen, auf dem ein Docker-Image von Jenkins ausgefĂŒhrt wurde. Der CentOS 7-Computer, den ich verwendet habe, war mit den neuesten CentOS 7-Patches (Stand: 20. Dezember 2016) auf dem neuesten Stand.
Da die neuesten Referenzen hier auf CentOS basieren, werde ich meinen AusfĂŒhrungshost auf einen Ubuntu- oder Debian-Rechner umstellen.
Ich fĂŒhre Docker version 1.12.5, build 7392c3b
auf diesem CentOS 7-Rechner aus. Docker hat sich nicht aufgehĂ€ngt, aber der Jenkins-Prozess, den ich in Docker ausgefĂŒhrt habe, wurde beendet, als diese Meldung angezeigt wurde.
Vielen Dank fĂŒr Docker! Ich benutze es die ganze Zeit und bin zutiefst dankbar fĂŒr Ihre Arbeit daran!
Ich sehe das gleiche Problem, wenn ich Jenkins mit Docker auf einem Linux 4.8.15-Computer verwende.
Hat jemand eine Lösung fĂŒr Rancher OS gefunden?
AFAICT, dies ist ein Sperrproblem im Netzwerk-Namespaces-Subsystem des Linux-Kernels. Dieser Fehler wurde vor ĂŒber einem Jahr ohne Antwort gemeldet: https://bugzilla.kernel.org/show_bug.cgi?id=97811 Es wurde daran gearbeitet (siehe hier: http://www.spinics. net/lists/netdev/msg351337.html), aber es scheint keine vollstĂ€ndige Lösung zu sein.
Ich habe versucht, den Netzwerk-Subsystem-Maintainer direkt anzupingen, ohne darauf zu reagieren. FWIW, ich kann das Problem in wenigen Minuten reproduzieren.
Smyte zahlt 5000 USD fĂŒr die Lösung dieses Problems. Klingt so, als mĂŒsste ich mit jemandem sprechen, der am Kernel arbeitet?
@petehunt Ich glaube, es gibt mehrere Probleme, die diesen Fehler verursachen.
Wir haben den Kernel 4.8.8
wie von @reshen vorgeschlagen
Es wird versucht, Mesosphere von einem Bootstrap-Knoten aus bereitzustellen. Alle Knoten sind CentOS 7.2 minimal mit allen angewendeten Updates. Der Bootstrap-Knoten zeigt den Fehler an, wie oben von anderen erwÀhnt:
Message from syslogd<strong i="6">@command01</strong> at Jan 16 02:30:24 ...
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
Message from syslogd<strong i="7">@command01</strong> at Jan 16 02:30:34 ...
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
Message from syslogd<strong i="8">@command01</strong> at Jan 16 02:30:44 ...
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
uname -r:
3.10.0-514.2.2.el7.x86_64
Docker -v:
Docker version 1.11.2, build b9f10c9
Ich kann bestĂ€tigen, dass ein Neustart die Nachrichten zum Schweigen bringt, aber sobald ich Mesosphere wieder einsetze, starten die Nachrichten ab und zu. MesosphĂ€re ist eine ziemlich groĂe Bereitstellung. Vielleicht können diejenigen, die versuchen, den Fehler zu reproduzieren, das Installationsprogramm verwenden, um den Fehler zu reproduzieren. Es dauert ein paar Minuten, bis der Fehler nach dem ersten Skriptwechsel ( --genconf ist der erste Schritt ) auftritt.
Wir haben das auch getroffen. Allerdings erwÀhnen die Fehlermeldungen in unserem Fall das GerÀt eth0
nicht lo
. Mein Fehler ist dieser:
kernel:unregister_netdevice: waiting for eth0 to become free. Usage count = 1
Ich gehe davon aus, dass Fehler wie das ErwÀhnen von eth0
anstelle von lo
dieselbe Ursache haben wie dieses Problem. Wenn nicht, sollten wir ein neues Ticket bezĂŒglich der eth0-Fehler eröffnen.
OPTIONS=" -H unix:///var/run/docker.sock --ip-forward=true --iptables=true --ip-masq=true --log-driver json-file --log-opt max-size=25m --log-opt max-file=2"
Wir haben das auch getroffen.
Fehler: unregister_netdevice: Warten darauf, dass lo frei wird.
Betriebssystem: CentOS Linux-Version 7.3.1611 (Kern)
Kernel 3.10.0-514.2.2.el7.x86_64
Docker-Version: 1.13.0-cs1-rc1
Docker-Optionen:
{
"disable-legacy-registry": wahr,
"icc": wahr,
"unsichere-Registrierungen":[],
"ipv6": falsch,
"iptables":wahr,
"storage-driver": "devicemapper",
"Speicheroptionen": [
"dm.thinpooldev=/dev/mapper/docker_vg-thinpool",
"dm.use_deferred_removal=true",
"dm.use_deferred_deletion=true"
],
"userland-proxy": false
}
Ich habe dies auf zwei CentOS-Systemen, neueste Updates auf mindestens einem von ihnen.
$ uname -r
3.10.0-514.2.2.el7.x86_64
$ docker -v
Docker version 1.12.6, build 78d1802
Hey, fĂŒr alle, die von diesem Problem auf RHEL oder CentOS betroffen sind, habe ich den Commit der Mainline-Kernel (torvalds/linux@751eb6b6042a596b0080967c1a529a9fe98dac1d) zurĂŒckportiert, der die Race-Bedingung im IPV6-IFP-Refcount auf 3.10.x-Kernel behebt, die in Enterprise-Distributionen verwendet werden. Dies sollte dieses Problem beheben.
Den Fehlerbericht mit funktionierendem Patch finden Sie hier :
Wenn Sie daran interessiert sind, es zu testen und ein RHEL 7- oder CentOS 7-System haben, habe ich mit dem Patch bereits den neuesten CentOS 7.3 3.10.0-514.6.1.el7.x86_64-Kernel kompiliert. Antworten Sie auf den CentOS Bugtracker-Thread und ich kann Ihnen einen Link zum Build senden.
Hinweis: Möglicherweise gibt es ein anderes Problem, das ein Refcount-Leck verursacht, aber dies sollte die Fehlermeldung fĂŒr viele von Ihnen beheben.
@stefanlasiewski @henryiii @jsoler
Ich werde einen Build ausprobieren, der auch diesen Fix hinzufĂŒgt: http://www.spinics.net/lists/netdev/msg351337.html spĂ€ter heute Abend.
@iamthebot bedeutet das, dass das Problem auch ohne einen Patch, den Sie gerade
@redbaron nur, wenn dies das Problem ist, auf das Sie treffen. Ich denke wirklich, dass es hier mehrere Kernel-Probleme gibt.
@redbaron vielleicht. #20569 scheint darauf hinzuweisen, dass es schwierig ist, IPv6 vollstÀndig zu deaktivieren.
Um ein wenig zu verdeutlichen, was unter der Haube passiert, die diese Nachricht generiert, zÀhlt der Kernel, ob ein GerÀt verwendet wird, bevor es aus einem Namespace entfernt, die Registrierung aufgehoben, deaktiviert usw Verweis auf ein GerÀt, dann wird diese Fehlermeldung angezeigt, da die Registrierung nicht aufgehoben werden kann, wenn sie von einer anderen Person verwendet wird.
Die Fixes, die ich bisher gesehen habe:
Ich denke, es gibt noch eine andere Race Condition beim Wechseln von Namespaces (dies scheint nach dem Erstellen einer Reihe neuer Container zu passieren), aber ich muss das Problem zuverlÀssig replizieren, um es zu finden und einen Patch zu schreiben.
Hat jemand ein minimales Verfahren, um dies konsequent zu reproduzieren? Scheint auf unseren Systemen zufÀllig zu passieren.
@iamthebot es ist nicht wirklich einfach, aber ich denke, wir können Ihnen eine Testumgebung zur VerfĂŒgung stellen, die dies zuverlĂ€ssig reproduzieren kann. Senden Sie mir eine E-Mail ([email protected]) und wir können die Details arrangieren.
Erleben Sie dies immer noch unter hoher Last auf Docker-Version 1.12.6, Build 7392c3b/1.12.6 auf 4.4.39-34.54.amzn1.x86_64 AWS Linux AMI.
Ich habe 9 Docker-Hosts, die alle fast identisch sind, und erlebe dies nur bei einigen von ihnen. Es mag Zufall sein, aber eine Gemeinsamkeit ist mir aufgefallen, dass ich dieses Problem anscheinend nur habe, wenn ich Container ausfĂŒhre, die SIGINT
nicht verarbeiten. Wenn ich diese Container docker stop
lege, hÀngt es 10 Sekunden lang und tötet dann den Container unhöflich.
Es dauert mehrere Tage, bis das Problem auftaucht und scheint zufĂ€llig aufzutreten, nicht nur sofort nach dem AusfĂŒhren von docker stop
. Dies ist meist anekdotisch, aber vielleicht hilft es jemandem.
Ich habe alle meine Docker-Knoten auf Kernel 3.10.0-514.6.1.el7.x86_64 auf CentOS 7.3 aktualisiert, wie
26. Jan 13:52:49 XXX-Kernel: unregister_netdevice: wartet darauf, dass lo frei wird. Nutzungsanzahl = 1
Nachricht von syslogd@XXX am 26. Januar 13:52:49 ...
kernel:unregister_netdevice : Warten, bis lo frei wird. Nutzungsanzahl = 1
@jsoler, nur um das angewendet , bevor du den Kernel erstellt hast? Oder verwendest du einen Stock-Kernel? Versuchen Sie auch, diesen anzuwenden (Patch sollte auf Àlteren Kerneln funktionieren).
Schicken Sie mir eine E-Mail ([email protected]) und ich kann Ihnen einen Link zu einem vorgefertigten Kernel senden. @vitherman Ich habe leider nicht viel Zeit, um mich damit zu
@ckeeney Ich kann dieses Verhalten bestÀtigen. Wir haben eine dockerisierte Node-Anwendung, die beim Herunterfahren den genannten Fehler auf dem Host-System verursacht hat. Nach der Implementierung einer Funktion in der Node.js-Anwendung, die SIGINT und SIGTERM abfÀngt, um die Anwendung ordnungsgemÀà herunterzufahren, ist der Fehler nicht mehr aufgetreten.
Was irgendwie Sinn macht; die Node-Anwendung verwendet die virtuelle Schnittstelle, die Docker erstellt. Wenn Node nicht ordnungsgemÀà heruntergefahren wird, hÀngt das GerÀt und das Hostsystem kann die Registrierung nicht aufheben, obwohl der Docker-Container erfolgreich gestoppt wurde.
Hier ist ein Beispiel-Code-Snippet:
function shutdown() {
logger.log('info', 'Graceful shutdown.');
httpServer.close();
if (httpsServer) {
httpsServer.close();
}
process.exit();
}
process.on('SIGINT', shutdown);
process.on('SIGTERM', shutdown);
@michael-niemand Gibt es ein anderes Signal, das von Node standardmĂ€Ăig fĂŒr ein sauberes Herunterfahren ordnungsgemÀà verarbeitet wird? (Sie können das STOPSIGNAL
im Bild oder auf docker run
durch das --stop-signal
Flag angeben.
@thaJeztah fĂŒr eine gute ErklĂ€rung des Problems und eine Problemumgehung siehe
@ckeeney Das ist mir bekannt (dh Prozesse, die als PID1
können möglicherweise nicht mit SIGINT
oder SIGTERM
umgehen ). Aus diesem Grund habe ich mich gefragt, ob die Angabe eines anderen Stoppsignals auch bei der AusfĂŒhrung als PID1
einen sauberen Shutdown bewirken wĂŒrde.
Alternativ fĂŒgt Docker 1.13 eine --init
Option hinzu (Pull-Request: https://github.com/docker/docker/pull/26061), die eine Init in den Container einfĂŒgt; In diesem Fall wird Node nicht als PID1
, was in FÀllen hilfreich sein kann, in denen Sie die Anwendung nicht aktualisieren können.
@iamthebot Ich habe die Kernelversion 3.10.0-514.el7 mit integriertem Patch erstellt, aber ich erhalte den gleichen Fehler. Nun, ich bin mir nicht sicher, ob ich das Kernel-Paket von centos gut gebaut habe. Könnten Sie mir Ihr Kernel-Paket zum Testen zur VerfĂŒgung stellen?
Vielen Dank
Ich beschÀftige/beschÀftige mich seit fast einem Jahr mit diesem Fehler. Ich verwende CoreOS mit PXE-Boot, ich habe IPv6 in der pxeboot-Konfiguration deaktiviert und habe dieses Problem seitdem kein einziges Mal gesehen.
Nun, meine Umgebung hat IPv6 mit dieser sysctl-Konfiguration deaktiviert
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
aber ich bekomme immer noch den Fehler
kernel:unregister_netdevice : Warten, bis lo frei wird. Nutzungsanzahl = 1
@jsoler richtig, das habe ich auch gemacht, ist trotzdem passiert. Erst als ich es auf pxe-Ebene getan habe, hörte es auf.
label coreos
menu label CoreOS
kernel coreos/coreos_production_pxe.vmlinuz
append initrd=coreos/coreos_production_pxe_image.cpio.gz ipv6.disable=1 cloud-config-url=http://...
Nur eine Beobachtung - es scheinen verschiedene Probleme im Spiel zu sein (das wurde bereits gesagt).
Einige haben festgestellt, dass Protokolle zwischen den oben genannten wechseln und andere nur eine der oben genannten haben.
Es gibt auch einen Àhnlichen Fehler, der unter Ubuntu protokolliert wurde . In diesem Fall scheint NFS das Problem zu sein.
@etlweather Ich glaube, dass der einzige gemeinsame Nenner tatsĂ€chlich darin besteht, dass ein abgemeldet werden kann, wie die Fehlermeldung sagt. Die GrĂŒnde _warum_ sind jedoch etwas anders. Bei uns war es definitiv das erwĂ€hnte Docker/Node-Problem (veth). FĂŒr eth ist die Ursache höchstwahrscheinlich etwas ganz anderes.
Passiert immer noch mit 4.9.0-0.bpo.1-amd64 auf Debian Jessie mit Docker 1.13.1. Gibt es eine Kernel-OS-Kombination, die stabil ist?
Dies ist möglicherweise kein reines Docker-Problem - ich bekomme es auf einem Proxmox-Server, auf dem ich nur Vanilla-LXC-Container (Ubuntu 16.04) ausfĂŒhre.
@darth-veitcher es ist ein Kernel-Problem
@thaJeztah stimmte zu, danke. Wollte heute Abend 4.9.9 von Mainline installieren und sehen, ob das Probleme behebt.
Ich bekomme es mit Docker 1.13.1 auf einem Debian mit Kernel 4.9.9-040909.
Ja, das Upgrade des Kernels auf Proxmox auf die neueste Version 4.9.9 hat den Fehler nicht behoben. Seltsam, da es erst nach einem Jahr ohne Probleme erschienen ist.
Möglicherweise steht in einer frĂŒheren Anweisung weiter oben im Thread etwas darĂŒber, dass sie entweder mit eingehĂ€ngten NFS- oder CIFS-Freigaben verknĂŒpft ist.
von meinem Iphone gesendet
Am 14. Februar 2017 um 07:47 Uhr schrieb Alfonso da Silva [email protected] :
Ich bekomme es mit Docker 1.13.1 auf einem Debian mit Kernel 4.9.9-040909.
â
Sie erhalten dies, weil Sie erwÀhnt wurden.
Antworten Sie direkt auf diese E-Mail, zeigen Sie sie auf GitHub an oder schalten Sie den Thread stumm.
Ich habe diesbezĂŒglich ein Bugzilla-Ticket bei Redhat geöffnet.
Einige Entwicklungen:
Red Hat hat die IPV6-Refcount-Leak-Patches von Mainline auf QA gestellt, es sieht so aus, als ob sie fĂŒr RHEL 7.4 in der Warteschlange stehen und möglicherweise auf 7.3 zurĂŒckportiert werden. Sollte bald auch auf CentOS-plus sein. Hinweis: Dieser Patch behebt nur in EINIGEN FĂ€llen Probleme. Wenn Sie einen 4.x-Kernel haben, ist dies ein strittiger Punkt, da sie bereits vorhanden sind.
Dies ist definitiv eine Race Condition im Kernel, soweit ich das beurteilen kann, was es wirklich nervig macht, es zu finden. Ich habe einen Schnappschuss des aktuellen Mainline-Kernels gemacht und arbeite an der Instrumentierung der verschiedenen Aufrufe, beginnend mit dem IPv6-Subsystem. Das Problem ist jetzt definitiv reproduzierbar: Alles, was Sie tun mĂŒssen, ist, eine Reihe von Containern zu erstellen, eine Menge Netzwerkverkehr aus ihnen zu schieben, das Programm in den Containern zum Absturz zu bringen und sie zu entfernen. Wenn Sie dies immer wieder tun, wird das Problem innerhalb von Minuten ausgelöst, am besten auf einer physischen 4-Core-Workstation.
Leider habe ich nicht viel Zeit, um daran zu arbeiten: Wenn es hier Kernel-Entwickler gibt, die bereit sind, bei der Instrumentierung der notwendigen Teile mitzuarbeiten, denke ich, können wir eine Abzweigung einrichten und daran arbeiten, dies Schritt fĂŒr Schritt zu suchen .
@iamthebot , ist es auf einem qemu-kvm-Setup reproduzierbar?
@iamthebot Ich habe mehrmals versucht, dies mit verschiedenen Kerneln zu docker-stress -c 100
mit userland-proxy
auf false ausgelöst wird, aber ich hatte kein GlĂŒck.
Wenn Sie ein zuverlÀssigeres Repro haben (auch wenn es lange dauert, bis es ausgelöst wird), kann ich es versuchen und nachsehen
Wir stoĂen in unseren Produktions- und Staging-Umgebungen auf die gleiche Schwierigkeit. Wir werden bald auf Docker 1.13 und Linux-Kernel 4.9 aktualisieren, aber wie bereits erwĂ€hnt; auch diese Versionen sind betroffen.
$ docker -v
Docker version 1.12.3, build 6b644ec
$ uname -a
Linux 4.7.0-0.bpo.1-amd64 #1 SMP Debian 4.7.8-1~bpo8+1 (2016-10-19) x86_64 GNU/Linux
Ich habe dieses Problem ziemlich regelmĂ€Ăig auf meinem Entwicklungssystem, immer beim Herunterfahren von Containern.
Allgemeine Information
â uname -a
Linux miriam 3.10.0-514.6.1.el7.x86_64 #1 SMP Sat Dec 10 11:15:38 EST 2016 x86_64 x86_64 x86_64 GNU/Linux
â cat /etc/redhat-release
Red Hat Enterprise Linux Workstation release 7.3 (Maipo)
â docker -v
Docker version 1.13.0, build 49bf474
â docker-compose -v
docker-compose version 1.10.0, build 4bd6f1a
â docker info
Containers: 11
Running: 0
Paused: 0
Stopped: 11
Images: 143
Server Version: 1.13.0
Storage Driver: overlay
Backing Filesystem: xfs
Supports d_type: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 03e5862ec0d8d3b3f750e19fca3ee367e13c090e
runc version: 2f7393a47307a16f8cee44a37b262e8b81021e3e
init version: 949e6fa
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-514.6.1.el7.x86_64
Operating System: Red Hat Enterprise Linux
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 31.19 GiB
Name: miriam
ID: QU56:66KP:C37M:LHXT:4ZMX:3DOB:2RUD:F2RR:JMNV:QCGZ:ZLWQ:6UO5
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
File Descriptors: 16
Goroutines: 25
System Time: 2017-02-15T10:47:09.010477057-06:00
EventsListeners: 0
Http Proxy: http://xxxxxxxxxxxxxxxxxxxx:80
Https Proxy: http://xxxxxxxxxxxxxxxxxxxx:80
No Proxy: xxxxxxxxxxxxxxxxxxxx
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Docker-Daemon-Log
DEBU[70855] Calling DELETE /v1.22/containers/9b3d01076f3b6a1373729e770a9b1b4e878c2e4be5e27376d24f21ffead6792f?force=False&link=False&v=False
DEBU[70855] Calling DELETE /v1.22/containers/38446ddb58bc1148ea2fd394c5c14618198bcfca114dae5998a5026152da7848?force=False&link=False&v=False
DEBU[70855] Calling DELETE /v1.22/containers/e0d31b24ea4d4649aec766c7ceb5270e79f5a74d60976e5894d767c0fb2af47a?force=False&link=False&v=False
DEBU[70855] Calling DELETE /v1.22/networks/test_default
DEBU[70855] Firewalld passthrough: ipv4, [-t nat -C POSTROUTING -s 172.19.0.0/16 ! -o br-ee4e6fb1c772 -j MASQUERADE]
DEBU[70855] Firewalld passthrough: ipv4, [-t nat -D POSTROUTING -s 172.19.0.0/16 ! -o br-ee4e6fb1c772 -j MASQUERADE]
DEBU[70855] Firewalld passthrough: ipv4, [-t nat -C DOCKER -i br-ee4e6fb1c772 -j RETURN]
DEBU[70855] Firewalld passthrough: ipv4, [-t nat -D DOCKER -i br-ee4e6fb1c772 -j RETURN]
DEBU[70855] Firewalld passthrough: ipv4, [-t filter -C FORWARD -i br-ee4e6fb1c772 -o br-ee4e6fb1c772 -j ACCEPT]
DEBU[70855] Firewalld passthrough: ipv4, [-D FORWARD -i br-ee4e6fb1c772 -o br-ee4e6fb1c772 -j ACCEPT]
DEBU[70855] Firewalld passthrough: ipv4, [-t filter -C FORWARD -i br-ee4e6fb1c772 ! -o br-ee4e6fb1c772 -j ACCEPT]
DEBU[70855] Firewalld passthrough: ipv4, [-D FORWARD -i br-ee4e6fb1c772 ! -o br-ee4e6fb1c772 -j ACCEPT]
DEBU[70855] Firewalld passthrough: ipv4, [-t filter -C FORWARD -o br-ee4e6fb1c772 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT]
DEBU[70855] Firewalld passthrough: ipv4, [-D FORWARD -o br-ee4e6fb1c772 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT]
DEBU[70856] Firewalld passthrough: ipv4, [-t filter -C FORWARD -o br-ee4e6fb1c772 -j DOCKER]
DEBU[70856] Firewalld passthrough: ipv4, [-t filter -C FORWARD -o br-ee4e6fb1c772 -j DOCKER]
DEBU[70856] Firewalld passthrough: ipv4, [-D FORWARD -o br-ee4e6fb1c772 -j DOCKER]
DEBU[70856] Firewalld passthrough: ipv4, [-t filter -C DOCKER-ISOLATION -i br-ee4e6fb1c772 -o docker0 -j DROP]
DEBU[70856] Firewalld passthrough: ipv4, [-D DOCKER-ISOLATION -i br-ee4e6fb1c772 -o docker0 -j DROP]
DEBU[70856] Firewalld passthrough: ipv4, [-t filter -C DOCKER-ISOLATION -i docker0 -o br-ee4e6fb1c772 -j DROP]
DEBU[70856] Firewalld passthrough: ipv4, [-D DOCKER-ISOLATION -i docker0 -o br-ee4e6fb1c772 -j DROP]
DEBU[70856] Firewalld passthrough: ipv4, [-t filter -C DOCKER-ISOLATION -i br-ee4e6fb1c772 -o br-b2210b5a8b9e -j DROP]
DEBU[70856] Firewalld passthrough: ipv4, [-D DOCKER-ISOLATION -i br-ee4e6fb1c772 -o br-b2210b5a8b9e -j DROP]
DEBU[70856] Firewalld passthrough: ipv4, [-t filter -C DOCKER-ISOLATION -i br-b2210b5a8b9e -o br-ee4e6fb1c772 -j DROP]
DEBU[70856] Firewalld passthrough: ipv4, [-D DOCKER-ISOLATION -i br-b2210b5a8b9e -o br-ee4e6fb1c772 -j DROP]
DEBU[70856] releasing IPv4 pools from network test_default (ee4e6fb1c772154fa35ad8d2c032299375bc2d7756b595200f089c2fbcc39834)
DEBU[70856] ReleaseAddress(LocalDefault/172.19.0.0/16, 172.19.0.1)
DEBU[70856] ReleasePool(LocalDefault/172.19.0.0/16)
Message from syslogd<strong i="10">@miriam</strong> at Feb 15 10:20:52 ...
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
@r-BenDoan Wenn Sie versuchen, einen Container zu stoppen, aber er nicht auf SIGINT reagiert, wartet Docker 10 Sekunden und beendet dann den Container unhöflich. Ich bin auf dieses Verhalten in meinen nodejs-Containern gestoĂen, bis ich die Signalbehandlung hinzugefĂŒgt habe. Wenn Sie sehen, dass ein Container 10 Sekunden braucht, um zu stoppen, verarbeitet er wahrscheinlich keine Signale und löst dieses Problem eher aus.
Stellen Sie sicher, dass Ihre Container ordnungsgemÀà stoppen können.
Obwohl ich nicht derjenige bin, der dieses Problem behebt, da ich nicht viel mit Linux-Kernel-Entwicklung zu tun habe, denke ich, dass ich recht habe, wenn ich sage, dass die "ich auch" -Kommentare nicht so hilfreich sind. Damit meine ich, nur zu sagen "Ich habe dieses Problem auch, mit Kernel vx.x und Docker 1.x" bringt nichts Neues in die Diskussion.
Ich wĂŒrde jedoch vorschlagen, dass "ich auch"-Kommentare, die mehr die Umgebung und die Methode der Reproduktion beschreiben, von groĂem Wert wĂ€ren.
Beim Lesen aller Kommentare wird klar, dass es ein paar Probleme gibt - wie ich vorhin gepostet habe, einige mit vethXYZ, einige mit eth0 und andere mit lo0. Dies deutet darauf hin, dass sie durch verschiedene Probleme verursacht werden könnten. Wenn Sie also nur "Ich auch" sagen, ohne den Fehler und die Umgebung vollstĂ€ndig zu beschreiben, kann dies die Leute in die Irre fĂŒhren.
Auch bei der Beschreibung der Umgebung reicht die Angabe der Kernel- und Docker-Version nicht aus. Laut Thread scheint es ein paar Faktoren zu geben, z. B. IPv6 aktiviert oder nicht. NodeJS reagiert nicht auf SIGINT (oder andere Container, die hier nicht auf NodeJS schlagen).
Es wĂ€re also nĂŒtzlich, zu beschreiben, wie hoch die Arbeitsbelastung der Umgebung ist. Dies tritt auch auf, wenn ein Container heruntergefahren wird, daher wĂŒrde ich den Leuten, die dieses Problem haben, vorschlagen, darauf zu achten, welcher Container gestoppt wird, wenn das Problem seinen hĂ€sslichen Kopf zeigt.
Obwohl es den Anschein hat, dass das Problem darin liegt, dass der Kernel eine Race Condition hat, wird die Identifizierung des Auslösers fĂŒr diejenigen, die das Problem beheben, eine enorme Hilfe sein. Und es kann den betroffenen Benutzern sogar eine sofortige Lösung bieten, z. B. die Implementierung eines Signalhandlers in einer NodeJS-Anwendung (ich weiĂ selbst nicht, ob dies das Auslösen des Problems verhindert, aber es scheint so, wie frĂŒhere Kommentare anderer).
FWIW kubernetes hat dies vollstÀndig mit dem "Hairpin-Modus" von veth korreliert und
hat die Verwendung dieser Funktion vollstÀndig eingestellt. Das haben wir noch nicht erlebt
Problem ĂŒberhaupt, ĂŒber Zehntausende von Produktionsmaschinen und weitlĂ€ufig
weitere TestlÀufe, seit dem Wechsel.
Bis dies behoben ist, verlassen Sie das Schiff. Finde eine andere Lösung :(
Am Mittwoch, den 15. Februar 2017 um 10:00 Uhr schrieb ETL [email protected] :
Obwohl ich nicht derjenige bin, der dieses Problem behebt, bin ich nicht viel von Linux
Kernel-Entwickler, ich denke, ich habe Recht, wenn ich sage, dass die "Ich auch"-Kommentare es nicht sind
das hilfreich. Damit meine ich, nur zu sagen: "Ich habe dieses Problem auch, mit
Kernel vx.x and Docker 1.x" bringt nichts Neues in die Diskussion.Ich wĂŒrde jedoch vorschlagen, dass "ich auch" Kommentare vorschlagen, die mehr beschreiben
Umgebung und Methode zur Reproduktion von groĂem Wert wĂ€ren.Beim Lesen aller Kommentare wird klar, dass es ein paar Probleme gibt -
wie ich vorhin gepostet habe, einige mit vethXYZ, einige mit eth0 und andere mit lo0.
Dies deutet darauf hin, dass sie durch verschiedene Probleme verursacht werden könnten. Also nur
"Ich auch" sagen, ohne den Fehler und die Umgebung vollstÀndig zu beschreiben, kann
Menschen in die Irre fĂŒhren.Wenn Sie die Umgebung beschreiben, geben Sie auch den Kernel und Docker
Version ist nicht ausreichend. Laut Thread scheint es ein paar Faktoren zu geben
wie IPv6 aktiviert oder nicht. NodeJS reagiert nicht auf SIGINT (oder andere
Container, hier kein Bashing auf NodeJS).Es wĂ€re also nĂŒtzlich, zu beschreiben, wie hoch die Arbeitsbelastung der Umgebung ist.
Dies tritt auch auf, wenn ein Container heruntergefahren wird, daher wĂŒrde ich
schlagen Sie den Menschen, die dieses Problem haben, auch vor, auf was zu achten
Container wird gestoppt, wenn das Problem seinen hÀsslichen Kopf zeigt.Obwohl das Problem anscheinend darin liegt, dass der Kernel eine Race-Bedingung hat -
Die Identifizierung des Auslösers wird denjenigen, die das Problem beheben, eine enorme Hilfe sein
Das Thema. Und es kann den betroffenen Benutzern sogar eine sofortige Lösung bieten
wie die Implementierung eines Signalhandlers in einer NodeJS-Anwendung (ich weiĂ es nicht)
Ich selbst, dass dies verhindert, dass das Problem ausgelöst wird, aber es scheint so per
frĂŒhere Kommentare anderer).â
Sie erhalten dies, weil Sie einen Kommentar abgegeben haben.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/docker/docker/issues/5618#issuecomment-280087293 oder stumm
der Faden
https://github.com/notifications/unsubscribe-auth/AFVgVFmu1SiStZcLKtKuk1W-tjn6wOXlks5rcz0hgaJpZM4B4L4Z
.
Ja, wir ziehen zu gke um und sehen dieses Problem nicht mehr (also kein Bug-Bounty mehr von uns :))
Hatte den Fehler gerade wieder. Ich habe versucht, eine node.js-Anwendung zu reparieren, die Sockets verwendet, und habe die Anwendung daher hĂ€ufig skaliert. Die node.js-App wurde auf https://github.com/deployd/deployd erstellt. Ich hoffe, dass dies ein paar mehr Informationen liefert. Interessant war auch, dass beide Server in meinem Schwarm gleichzeitig den Fehler unregister_netdevice anzeigten, nachdem ich den Dienst ĂŒber den Docker-Dienst rm entfernt hatte. Der Container wurde auf 4 skaliert, sodass auf jeder Maschine zwei Container liefen.
edit Ist schon wieder passiert! Arbeiten an derselben node.js-App. In den letzten 3 oder 4 Tagen habe ich nicht direkt an dieser node.js-Anwendung gearbeitet und es ist nie aufgetreten.
edit2 wird versuchen, der nodejs-App einen Signalhandler hinzuzufĂŒgen. Mal sehen ob das hilft....
Ich bin gerade auf diesen Fehler gestoĂen, nachdem ich docker-py verwendet hatte, um eine neue Instanz in EC zu veröffentlichen. Ich konnte jedoch mit Strg + C beenden und habe es seitdem nicht mehr gesehen (jetzt, da die meisten Bilder schneller aus dem Cache erstellt werden)
```{"status":"Pushed","progressDetail":{},"id":"c0962ea0b9bc"}
{"status":"Stufe: Auszug: sha256:f5c476a306f5c2558cb7c4a2fd252b5b186b65da22c8286208e496b3ce685de8 GröĂe: 5737"}
{"progressDetail":{},"aux":{"Tag":"stage","Digest":"sha256:f5c476a306f5c2558cb7c4a2fd252b5b186b65da22c8286208e496b3ce685de8","Size":5737}}
Docker-Image erfolgreich veröffentlicht
Nachricht von syslogd@ip-172-31-31-68 am 16. Februar 19:49:16 ...
Kernel:[1611081.976079] unregister_netdevice: Warten darauf, dass lo frei wird. Nutzungsanzahl = 1
Nachricht von syslogd@ip-172-31-31-68 am 16. Februar 19:49:27 ...
Kernel:[1611092.220067] unregister_netdevice: Warten darauf, dass lo frei wird. Nutzungsanzahl = 1
[1]+ Angehalten ./image-publish.py
[ root@ip-172-31-xx-xx Bildveröffentlichung ]# ^C
[ root@ip-172-31-xx-xx Bildveröffentlichung ]#
@thockin ist diese Einstellung --hairpin-mode=none
auf den Kubelets?
=none bricht Container, die mit NAT auf sich selbst zurĂŒckgefĂŒhrt werden. Wir gebrauchen
promiscuous-bridge standardmĂ€Ăig.
Am Donnerstag, 16. Februar 2017 um 19:26 Uhr, Kanat Bekt [email protected]
schrieb:
@tockin https://github.com/tockin ist diese Einstellung --hairpin-mode=none
auf den Kubelets?â
Sie erhalten dies, weil Sie erwÀhnt wurden.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/docker/docker/issues/5618#issuecomment-280539673 oder stumm
der Faden
https://github.com/notifications/unsubscribe-auth/AFVgVLNwAH6NWVaIKhJfS147O9w_rtJEks5rdRN8gaJpZM4B4L4Z
.
@thockin Welche Container möchten möglicherweise ĂŒber Service ClusterIP auf sich selbst zugreifen?
Es stellt sich heraus, dass es hÀufiger vorkommt, als ich dachte, und als wir es brachen, viele
der Leute beschwerten sich.
Am 17. Februar 2017 um 00:38 Uhr schrieb "Maxim Ivanov" [email protected] :
@tockin https://github.com/tockin welche Container vielleicht möchten
selbst ĂŒber Service ClusterIP zugreifen?â
Sie erhalten dies, weil Sie erwÀhnt wurden.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/docker/docker/issues/5618#issuecomment-280588366 oder stumm
der Faden
https://github.com/notifications/unsubscribe-auth/AFVgVLn3uBvUW-dQ72qst5_eYiFUtfSVks5rdVyIgaJpZM4B4L4Z
.
Ich glaube, ich weiĂ, warum eine dockerisierte Nodejs-App dieses Problem verursachen könnte. Node verwendet standardmĂ€Ăig Keep-Alive-Verbindungen. Wenn server.close()
verwendet wird, akzeptiert der Server keine neuen Verbindungen. Aktuelle aktive Verbindungen wie Websockets oder HTTP-Keep-Alive-Verbindungen werden jedoch weiterhin aufrechterhalten. Wenn die dockerisierte App auch auf n skaliert wird, kann dies zu waiting for lo to become free
da bei der Zwangsbeendigung lo neuere freigegeben werden. Wenn Docker diese App an einen anderen Knoten verteilt oder die App verkleinert wird, sendet Docker ein Signal an die App, dass sie heruntergefahren werden soll. Die App hört auf dieses Signal und kann reagieren. Wenn die App nach einigen Sekunden nicht beendet wird, beendet Docker sie ohne zu zögern. Ich habe Signalhandler hinzugefĂŒgt und festgestellt, dass bei Verwendung von server.close()
der Server nicht perfekt beendet wird, sondern "nur" keine neuen Verbindungen mehr akzeptiert (siehe https://github.com/nodejs/node/issues/2642). Daher mĂŒssen wir sicherstellen, dass auch offene Verbindungen wie Websockets oder http-Keep-Alive geschlossen werden.
Umgang mit Websockets:
Die nodejs-App sendet an alle Websockets closeSockets
wenn ein Shutdown-Signal empfangen wird. Der Client hört auf dieses closeSockets
Ereignis und ruft sockets.disconnect()
und kurz darauf sockets.connect()
. Denken Sie daran, dass server.close()
aufgerufen wurde, damit diese Instanz keine neuen Anfragen akzeptiert. Wenn andere Instanzen dieser dockerisierten App ausgefĂŒhrt werden, wĂ€hlt der Loadbalancer im Docker schlieĂlich eine Instanz aus, die nicht heruntergefahren wird, und eine erfolgreiche Verbindung wird hergestellt. Die Instanz, die heruntergefahren werden soll, hat keine offenen Websockets-Verbindungen.
var gracefulTermination = function(){
//we don't want to kill everything without telling the clients that this instance stops
//server.close() sets the server to a state on which he doesn't allow new connections
//but the old connections (websockets) are still open and can be used
server.close(function(){
// this method is called when the server terminates
console.log('close bknd');
process.exit();
});
//iterate through all open websockets and emit 'closeSockets' to the clients.
//Clients will then call disconnect() and connect() on their site to establish new connections
//to other instances of this scaled app
Object.keys(server.socketIoObj.sockets.sockets).forEach(function(id) {
console.log("WebSocket ID:",id, " will be closed from the client.")
server.socketIoObj.to(id).emit('closeSockets');
});
};
process.on( "SIGINT", function() {
console.log('CLOSING [SIGINT]');
gracefulTermination();
});
...
So handhaben Sie Keep-Alive-HTTP-Verbindungen:
Derzeit weiĂ ich nicht, wie das perfekt gemacht werden kann. Am einfachsten ist es, Keep-Alive zu deaktivieren.
app.use(function (req, res, next) {
res.setHeader('Connection', 'close');
next();
}
Eine andere Möglichkeit besteht darin, das Keep-Alive-Timeout auf einen sehr niedrigen Wert zu setzen. Zum Beispiel 0,5 Sekunden.
app.use(function (req, res, next) {
res.setTimeout(500);
next();
}
Hoffe das konnte anderen helfen :)
Ich habe die gleichen Probleme. AnhÀnge sind alle Protokolle, die aus dem ecs-logs-collector-Skript erstellt wurden.
Bin fĂŒr jede Hilfe dankbar :)
Ich habe die gleichen Probleme.
Docker-Version 1.13.1, Build 092cba3
Linux debian 4.8.6-x86_64-linode78
Linux-Backup 4.6.0-040600-generic #201606100558 SMP Fr Jun 10 10:01:15 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Serverversion: 1.13.1
Gleicher Fehler. Ich verwende Mount im privilegierten Container. Nach 4-5 DurchlĂ€ufen friert es ein. Ich habe auch das gleiche Problem mit dem neuesten Standard-Kernel fĂŒr 16.04
Jeder, @etlweather ist
@rneugeba @redbaron Leider ist das aktuelle "Repro", das ich habe, sehr hardwarespezifisch (alles auĂer dass dies eine Rennbedingung ist). Ich habe nicht versucht, ein QEMU-Repro zu erhalten, aber das ist definitiv der nĂ€chste Schritt, damit mehrere Personen tatsĂ€chlich daran arbeiten und das erwartete Ergebnis erzielen können (idealerweise in einem 1-CPU-Kern-Setup). Wenn jemand schon eine hat, schick mir bitte eine E-Mail (sie steht in meinem Profil). Ich werde es ausgiebig testen und hier posten.
Wir bekommen dies in GCE ziemlich hÀufig. Docker friert ein und die Maschine hÀngt beim Neustart.
[782935.982038] unregister_netdevice: waiting for vethecf4912 to become free. Usage count = 17
Der Container fĂŒhrt eine Go-Anwendung aus und hat die konfigurierte Hairpin-Nat.
Docker:
matthew@worker-1:~$ docker version
Client:
Version: 1.12.6
API version: 1.24
Go version: go1.6.4
Git commit: 78d1802
Built: Tue Jan 10 20:38:45 2017
OS/Arch: linux/amd64
Server:
Version: 1.12.6
API version: 1.24
Go version: go1.6.4
Git commit: 78d1802
Built: Tue Jan 10 20:38:45 2017
OS/Arch: linux/amd64
Ubuntu 16.04LTS,
matthew@worker-1:~$ uname -a
Linux worker-1 4.4.0-64-generic #85-Ubuntu SMP Mon Feb 20 11:50:30 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Hat jemand einen Lösungsvorschlag dafĂŒr? Ich habe versucht, --userland-proxy=true
aktivieren und Docker hÀngt nach einer Weile immer noch. Es scheint, dass Kubernates eine Lösung von dem hat, was @tockin oben geschrieben hat, aber es ist nicht klar, was --hairpin-mode=promiscuous-bridge
genau macht und wie man das bei einer einfachen Jane Ubuntu 16.x Docker-Installation konfiguriert.
Ich kann dies zuverlĂ€ssig erreichen, wenn ich Proxmox ausfĂŒhre und Container verwende. Insbesondere wenn ich in letzter Zeit eine betrĂ€chtliche Datenmenge oder wirklich eine beliebige Datenmenge verschoben habe, fĂŒhrt das Herunterfahren oder das harte Stoppen des Containers zu diesem Fehler. Ich habe es am hĂ€ufigsten gesehen, wenn ich Container verwende, die mein NAS darin einbinden, aber das könnte ein Zufall sein.
# uname -a
Linux proxmox01 4.4.40-1-pve #1 SMP PVE 4.4.40-82 (Thu, 23 Feb 2017 15:14:06 +0100) x86_64 GNU/Linux
# cat /etc/debian_version
8.7
Und innerhalb von Proxmox:
proxmox-ve: 4.4-82 (running kernel: 4.4.40-1-pve)
pve-manager: 4.4-12 (running version: 4.4-12/e71b7a74)
pve-kernel-4.4.35-1-pve: 4.4.35-77
pve-kernel-4.4.40-1-pve: 4.4.40-82
lvm2: 2.02.116-pve3
corosync-pve: 2.4.2-1
libqb0: 1.0-1
pve-cluster: 4.0-48
qemu-server: 4.0-109
pve-firmware: 1.1-10
libpve-common-perl: 4.0-92
libpve-access-control: 4.0-23
libpve-storage-perl: 4.0-76
pve-libspice-server1: 0.12.8-2
vncterm: 1.3-1
pve-docs: 4.4-3
pve-qemu-kvm: 2.7.1-4
pve-container: 1.0-94
pve-firewall: 2.0-33
pve-ha-manager: 1.0-40
ksm-control-daemon: 1.2-1
glusterfs-client: 3.5.2-2+deb8u3
lxc-pve: 2.0.7-3
lxcfs: 2.0.6-pve1
criu: 1.6.0-1
novnc-pve: 0.5-8
smartmontools: 6.5+svn4324-1~pve80
zfsutils: 0.6.5.9-pve15~bpo80
Es ist erwĂ€hnenswert, dass Docker auf diesem System nicht installiert ist und noch nie war. Ich stelle gerne alle Daten zur VerfĂŒgung, die die Community benötigt, um dieses Problem zu beheben. Sagen Sie mir einfach, welche Befehle ausgefĂŒhrt werden sollen.
Ich kann dies auf Centos 7.3 reproduzieren, die als Schwarm-Worker-Knoten ausgefĂŒhrt werden, auf dem dtr mit einem zugeordneten gemounteten nfs-Volume ausgefĂŒhrt wird
Das hier diskutierte Problem ist ein Kernel-Bug und wurde noch nicht behoben. Es gibt eine Reihe von Optionen, die fĂŒr _manche_ Situationen hilfreich sein können, aber nicht fĂŒr alle (es ist höchstwahrscheinlich eine Kombination von Problemen, die denselben Fehler auslösen).
"Ich habe das auch" hilft nicht, den Fehler zu beheben. Hinterlassen Sie nur einen Kommentar, wenn Sie Informationen haben, die zur Lösung des Problems beitragen können (in diesem Fall ist die Bereitstellung eines Patches fĂŒr den Kernel-Upstream möglicherweise der beste Schritt).
Wenn Sie wissen möchten, dass Sie auch dieses Problem haben , verwenden Sie
Jeder Kommentar hier sendet eine E-Mail / Benachrichtigung an ĂŒber 3000 Personen. Ich möchte die Konversation zu diesem Thema nicht abschlieĂen, da es noch nicht gelöst ist, aber möglicherweise gezwungen wird, wenn Sie dies ignorieren.
Vielen Dank!
Das ist alles schön und gut, aber welche Möglichkeiten helfen _genau_? Dieses Problem verursacht uns Probleme in der Produktion, daher wĂŒrde ich gerne alle Workarounds tun, die notwendig sind, um den Kernel-Bug zu umgehen.
Wenn jemand von Docker Zeit hat, den Kubernetes-Workaround auszuprobieren, bitte
lass es mich wissen und wir können dich darauf hinweisen. Ich kann die Ănderungen nicht extrahieren
und patchen Sie sie jetzt selbst in Docker.
Am Donnerstag, 9. MĂ€rz 2017 um 7:46 Uhr, Matthew Newhook [email protected]
schrieb:
Das ist alles schön und gut, aber was genau sind die Optionen, die helfen?
Dieses Problem verursacht uns Probleme in der Produktion, also wĂŒrde ich gerne tun, was auch immer
Workarounds, die notwendig sind, um den Kernel-Bug zu umgehen.â
Sie erhalten dies, weil Sie erwÀhnt wurden.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/docker/docker/issues/5618#issuecomment-285388243 oder stumm
der Faden
https://github.com/notifications/unsubscribe-auth/AFVgVGdH5VX_oFWkImyo_TvlIuhmwMepks5rkB7MgaJpZM4B4L4Z
.
@thockin danke. Ich habe das PR/Problem in Kubernetes mit dem Hairpin-Mode-Workaround verfolgt. Aber wĂ€hrend des vielen Hin und Hers habe ich den Ăberblick verloren, wenn die Problemumgehung dieses Problem tatsĂ€chlich beseitigt ?
(Wie ich weiĂ, gibt es verschiedene Szenarien, die die Ref-Count-Inkonsistenz im Kernel verursachen).
Wenn Sie mich auf den PR verweisen können, von dem Sie glauben, dass er das Problem in K8s behebt, werde ich daran arbeiten, dies zumindest fĂŒr den Fall, dass der Userland-Proxy standardmĂ€Ăig deaktiviert ist, im Docker gepatcht zu bekommen. (Und wir können es mit den Docker-Stress-Reproduktionsschritten testen).
Ich bin mir nicht sicher, ob ich eine einzige PR habe, aber Sie können sich den aktuellen Stand ansehen. Start
Hier:
Am Samstag, 11. MĂ€rz 2017 um 22:49 Uhr, Madhu Venugopal [email protected]
schrieb:
@thockin https://github.com/thockin danke. Ich habe die verfolgt
PR/Problem in Kubernetes mit der Problemumgehung im Hairpin-Modus. Aber wÀhrend der
Vieles hin und her, ich habe den Ăberblick verloren, wenn der Workaround das tatsĂ€chlich beseitigt
Ausgabe ?
(Wie ich weiĂ, gibt es verschiedene Szenarien, die den Ref-Count verursachen
Inkonsistenz im Kernel).Wenn Sie mich auf die PR verweisen können, die Ihrer Meinung nach das Problem in K8s anspricht,
Ich werde daran arbeiten, dass dies im Docker zumindest fĂŒr den Fall des Drehens gepatcht wird
userland-proxy standardmĂ€Ăig deaktiviert. (Und wir können es mit dem Docker-Stress testen
Reproduktionsschritte).â
Sie erhalten dies, weil Sie erwÀhnt wurden.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/docker/docker/issues/5618#issuecomment-285926217 oder stumm
der Faden
https://github.com/notifications/unsubscribe-auth/AFVgVIlGs_QccxS6YYQiLNybddDzB4yUks5rk5VogaJpZM4B4L4Z
.
Hey alle, nur um es klarzustellen, die einzige "Kubernetes-Problemumgehung" besteht darin, den Promiscuous-Modus auf der zugrunde liegenden Bridge zu aktivieren. Dasselbe erreichen Sie mit ip link set <bridgename> promisc on
mit iproute2. Es verringert die Wahrscheinlichkeit, auf den Fehler zu stoĂen, beseitigt ihn jedoch möglicherweise nicht vollstĂ€ndig.
Theoretisch sollte dies nicht funktionieren ... aber aus irgendeinem Grund scheint der Promiscuous-Modus den GerÀte-Teardown gerade so langsam zu machen, dass Sie kein Rennen bekommen, um den Ref-ZÀhler zu verringern. Vielleicht kann sich einer der Kurbernetes-Mitwirkenden hier einmischen, wenn er in diesem Thread ist.
Ich kann ĂŒberprĂŒfen, ob die Problemumgehung (NICHT FIX) mit meinem umgebungsspezifischen Repro funktioniert. Ich kann nicht wirklich ĂŒberprĂŒfen, ob es hilft, wenn Sie die IPVLAN- oder MACVLAN-Treiber verwenden (wir verwenden macvlan in prod), da es sehr schwierig scheint, diese Setups dazu zu bringen, diesen Fehler zu erzeugen. Kann jemand mit einem Repro versuchen, die Problemumgehung zu ĂŒberprĂŒfen?
Hallo zusammen, ich habe versucht, das Kernelproblem zu debuggen, hatte eine E-Mail-Kette auf der Mailingliste "netdev", also wollte ich hier nur einige Ergebnisse posten.
https://www.spinics.net/lists/netdev/msg416310.html
Das Problem, das wir sehen, ist das
unregister_netdevice: waiting for lo to become free. Usage count = 1
wÀhrend der Containerabschaltung. Wenn ich den Namespace des Containernetzwerks inspiziere, scheint es, als ob das eth0
GerÀt bereits gelöscht wurde, aber nur das lo
GerĂ€t dort verbleibt. Und es gibt eine andere Struktur, die die Referenz fĂŒr dieses GerĂ€t enthĂ€lt.
Nach einigem Suchen stellt sich heraus, dass das "Ding", das die Referenz enthÀlt, einer der "Routing-Cache" ( struct dst_entry
) ist. Und etwas verhindert, dass dieses bestimmte dst_entry
gc'ed wird (der ReferenzzĂ€hler fĂŒr dst_entry
ist gröĂer als 0). Also loggte ich alle dst_hold()
(erhöhe dst_entry ReferenzzÀhler um 1) und dst_release()
(verringere dst_entry ReferenzzÀhler um 1), und es gibt tatsÀchlich mehr dst_hold()
Aufrufe als dst_release()
.
Hier sind die Protokolle im Anhang: kern.log.zip
Zusammenfassung:
lo
Schnittstelle wurde in lodebug
umbenannt, um das Greifen zu erleichterndst_entry
beginnt mit 1dst_entry
(der die Referenz fĂŒr lo enthĂ€lt) am Ende ist 19dst_hold()
Anrufe und 258023 insgesamt dst_release()
Anrufedst_hold()
Calls gibt es 88034 udp_sk_rx_dst_set()
(die dann dst_hold()
), 152536 inet_sk_rx_dst_set()
und 17471 __sk_add_backlog()
dst_release()
Anrufen gibt es 240551 inet_sock_destruct()
und 17472 refdst_drop()
Es gibt insgesamt mehr udp_sk_rx_dst_set()
und inet_sk_rx_dst_set()
Aufrufe als inet_sock_destruct()
.
AKTUALISIEREN:
Es stellte sich heraus, dass Sockets ( struct sock
) korrekt erstellt und zerstört wurden, aber fĂŒr einige der TCP-Sockets werden inet_sk_rx_dst_set()
mehrmals auf demselben dst
aufgerufen, aber es gibt nur einen entsprechenden inet_sock_destruct()
, um den Verweis auf dst
freizugeben.
Hier ist der CentOS 7.3-Workaround, der es fĂŒr mich behoben hat:
yum --enablerepo=centosplus install kernel-plus
egrep ^menuentry /etc/grub2.cfg | cut -f 2 -d \â
grub2-set-default 0
reboot
Hier ist der Patch, der es behebt:
https://bugs.centos.org/view.php?id=12711&nbn=1
UPDATE: Es stellte sich heraus, dass das Problem nicht dauerhaft gelöst wurde. Es tauchte einige Stunden spÀter wieder mit der folgenden Wandnachricht auf:
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
@adrianotto - zur Klarstellung:
@stayclassychicago @adrianotto Dieser Patch
@stayclassychicago Bevor ich den 3.10.0-514.10.2.el7.centos.plus.x86_64
Kernel ausprobierte, bekam ich sehr regelmĂ€Ăig kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
, fast jedes Mal, wenn ich einen Container mit docker run --rm ...
ausfĂŒhrte, wenn der Container beendet wurde. Nach dem Kernel-Upgrade und dem Neustart blieb es fĂŒr viele Stunden vollstĂ€ndig stehen und kam dann wieder zurĂŒck. Jetzt die HĂ€lfte der Zeit, die ich Container lösche, funktioniert es einwandfrei, wo es frĂŒher sehr oft zu Fehlern kam. Ich weiĂ nicht genau, ob der neue Kernel hilft, aber es schadet nicht.
Es sieht so aus, als ob es sehr einfach zu reproduzieren ist, wenn die Maschine eine LACP-Bonding-Schnittstelle hat. Wir haben einen Schwarm-Cluster mit 3 Knoten, alle 3 mit einer konfigurierten LACP-Bonding-Schnittstelle, und dieses Problem erlaubt uns im Grunde nicht, mit dem Cluster zu arbeiten. Wir mĂŒssen Knoten alle 15-20 Minuten neu starten.
BestĂ€tigt - sobald ich das LACP-Bonden von den Interfaces (die als Hauptinterfaces verwendet wurden) entfernt habe, funktioniert alles fĂŒr mehr als 12 Stunden einwandfrei. Wird alle ~30 Minuten gebrochen.
Dies ist reproduzierbar auf Linux containerhost1 4.9.0-0.bpo.2-amd64 #1 SMP Debian 4.9.18-1~bpo8+1 (2017-04-10) x86_64 GNU/Linux
wobei Docker version 17.04.0-ce, build 4845c56
im privilegierten Modus lÀuft, wenn wir cifs-Mounts geöffnet haben. Wenn der Container mit geöffneten Mounts stoppt, reagiert Docker nicht mehr und wir erhalten den kernel:[ 1129.675495] unregister_netdevice: waiting for lo to become free. Usage count = 1
-Fehler.
Ubuntu 16.04 (Kernel 4.4.0-78-generic) hat das Problem immer noch. Und wenn es passiert, bleibt jede Anwendung, die versucht, einen neuen Netzwerk-Namespace ĂŒber den Klon-Systemaufruf zu erstellen, stecken
[ 3720.752954] [<ffffffff8183c8f5>] schedule+0x35/0x80
[ 3720.752957] [<ffffffff8183cb9e>] schedule_preempt_disabled+0xe/0x10
[ 3720.752961] [<ffffffff8183e7d9>] __mutex_lock_slowpath+0xb9/0x130
[ 3720.752964] [<ffffffff8183e86f>] mutex_lock+0x1f/0x30
[ 3720.752968] [<ffffffff8172ba2e>] copy_net_ns+0x6e/0x120
[ 3720.752972] [<ffffffff810a169b>] create_new_namespaces+0x11b/0x1d0
[ 3720.752975] [<ffffffff810a17bd>] copy_namespaces+0x6d/0xa0
[ 3720.752980] [<ffffffff8107f1d5>] copy_process+0x905/0x1b70
[ 3720.752984] [<ffffffff810805d0>] _do_fork+0x80/0x360
[ 3720.752988] [<ffffffff81080959>] SyS_clone+0x19/0x20
[ 3720.752992] [<ffffffff81840a32>] entry_SYSCALL_64_fastpath+0x16/0x71
Die einzige Lösung besteht darin, die Maschine hart zurĂŒckzusetzen.
Ich bin auf dieses Problem gestoĂen, als ich ein NFS-Volume in einem privilegierten Container gemountet und dann den Container neu gestartet habe.
Es scheint mir, dass dieses Problem bei RHEL 7 mit dem gleichen Verfahren nie aufgetreten ist.
$ docker version
Client:
Version: 1.12.6
API version: 1.24
Package version: docker-common-1.12.6-6.gitae7d637.fc25.x86_64
Go version: go1.7.4
Git commit: ae7d637/1.12.6
Built: Mon Jan 30 16:15:28 2017
OS/Arch: linux/amd64
Server:
Version: 1.12.6
API version: 1.24
Package version: docker-common-1.12.6-6.gitae7d637.fc25.x86_64
Go version: go1.7.4
Git commit: ae7d637/1.12.6
Built: Mon Jan 30 16:15:28 2017
OS/Arch: linux/amd64
Red Hat behauptet, dass eine Instanz dieses Fehlers mit der Veröffentlichung von kernel-3.10.0-514.21.1.el7 behoben wurde. Ich nehme an, sie werden den Fix so schnell wie möglich vorspielen und auf 4.12 umbasieren. Dieses Paket ist auch bereits fĂŒr CentOS 7 verfĂŒgbar.
Dokumentation zum Fix (RHN-Zugriff erforderlich):
https://access.redhat.com/articles/3034221
https://bugzilla.redhat.com/show_bug.cgi?id=1436588
Aus dem Artikel:
"Im Falle einer doppelten IPv6-Adresse oder eines Problems beim Festlegen einer Adresse ist eine Race-Bedingung aufgetreten. Diese Race-Bedingung fĂŒhrte manchmal zu einem Leck beim ZĂ€hlen von Adressreferenzen. Folglich schlugen Versuche zum Aufheben der Registrierung eines NetzwerkgerĂ€ts mit der folgenden Fehlermeldung fehl: "unregister_netdevice: waiting um frei zu werden. Nutzungsanzahl = 1". Mit diesem Update wurde der zugrunde liegende Quellcode behoben, und NetzwerkgerĂ€te melden sich jetzt wie erwartet in der beschriebenen Situation ab."
Ich habe diesen Fix bereits in allen Systemen unseres PaaS-Pools implementiert und es sind bereits 2 Tage vergangen, ohne dass der Fehler auftritt. FrĂŒher wurde mindestens ein System pro Tag eingefroren. Ich werde hier berichten, wenn der Fehler wieder auftritt.
Ich habe die Kernel-Version 3.10.0-514.21.1.el7.x86_64 und habe immer noch das gleiche Symptom.
Message from syslogd<strong i="6">@docker</strong> at May 26 22:02:26 ...
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
# uname -a
Linux docker 3.10.0-514.21.1.el7.x86_64 #1 SMP Thu May 25 17:04:51 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
# uptime
22:03:10 up 35 min, 3 users, load average: 0.16, 0.07, 0.06
@adrianotto Anscheinend gibt es mehrere Möglichkeiten, dieses Problem zu
@bcdonadio Wenn Sie sich https://git.centos.org/commitdiff/rpms!kernel.git/b777aca52781bc9b15328e8798726608933ceded ansehen, werden Sie https://bugzilla.redhat.com/show_bug.cgi?id=1436588 Fehler ist "behoben" durch diese Ănderung:
+- [net] ipv6: addrconf: fix dev refcont leak when DAD failed (Hangbin Liu) [1436588 1416105]
Was seit 4.8 im Upstream-Kernel ist, glaube ich (https://github.com/torvalds/linux/commit/751eb6b6042a596b0080967c1a529a9fe98dac1d). Und 4.9 und 4.10 haben diesen Fehler, also hat RedHat nur einige der Fixes vom Upstream zurĂŒckportiert, die wahrscheinlich einige Probleme beheben, aber definitiv nicht alle.
@bcdonadio Ich kann den Fehler auf meinem System reproduzieren, Testskript einmal pro Stunde von Cron aus ausfĂŒhre:
#!/bin/sh
TAG=`date +%F_%H_%M_%S_UTC`
docker pull centos:centos6
docker run --rm adrianotto/centos6 yum check-update -q > package_updates.txt
LINES=`wc -l < package_updates.txt`
if [ $LINES -eq 0 ] ; then
rm -f package_updates.txt
echo "No packages need to be updated"
exit 0
fi
docker run --rm adrianotto/centos6 rpm -a -q > old_packages.txt
docker build -t temp:$TAG .
docker run --rm temp:$TAG rpm -a -q > new_packages.txt
docker rmi temp:$TAG
Dieses Skript erstellt nur eine Paketliste mit einem Image in der Docker-Registrierung und ein weiteres mit einem, das lokal erstellt wurde, damit ich sie vergleichen kann. Das Dockerfile ist genau das:
FROM centos:centos6
MAINTAINER Adrian Otto
RUN yum clean all && yum update -y && yum clean all
2-4 Minuten spÀter bekommt syslog diese Meldung:
Message from syslogd<strong i="13">@docker</strong> at May 27 16:51:55 ...
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 0
Beim letzten Vorfall geschah ein paar Minuten, nachdem ich das Skript manuell ausgefĂŒhrt hatte. Ich vermute, dass die Fehlerbedingung ausgelöst wird, nachdem eine ZeitĂŒberschreitung nach dem Versuch des Löschens des Containers verstrichen ist.
Ich bin mir sicher, dass die Fehlerbedingung zeitweise auftritt, da das obige Skript um :00 nach jedem Fehler als Cron-Job ausgefĂŒhrt wird. Hier ist ein Beispiel der Fehlerausgabe, die syslog aufgezeichnet hat:
May 26 01:02:44 docker kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
May 26 02:02:22 docker kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
May 26 02:02:32 docker kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
May 26 03:02:18 docker kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
May 26 03:02:28 docker kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
May 26 03:02:38 docker kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
May 26 04:03:14 docker kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
May 26 05:02:25 docker kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
May 26 05:02:35 docker kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
May 26 06:03:31 docker kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
May 26 06:03:41 docker kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
May 26 06:03:51 docker kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
May 26 06:04:02 docker kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
May 26 09:03:04 docker kernel: unregister_netdevice: waiting for lo to become free. Usage count = 1
Es passiert also irgendwo im Bereich von 2 bis 4 Minuten nach dem AusfĂŒhren und Beenden der Container und werden von Docker aufgrund des Flags --rm gelöscht. Beachten Sie auch aus dem obigen Protokoll, dass nicht fĂŒr jeden Container, der ausgefĂŒhrt/gelöscht wird, ein Fehler auftritt, aber er ist ziemlich konsistent.
WÀre es möglich, dass jemand sieht, ob dieser Patch die Dinge verbessert?
https://patchwork.ozlabs.org/patch/768291/
@hlrichardson Das sieht tatsĂ€chlich so aus! Ich werde versuchen, es morgen auf unseren 3.16-Kernel zurĂŒck zu portieren oder bestimmte Server zu aktualisieren und Kernel 4.9 mit diesem Patch morgen zu kompilieren, wir werden sehen, wie es lĂ€uft.
Nach ĂberprĂŒfung der Commit-Referenzen dieses Patches (https://github.com/torvalds/linux/commit/0c1d70af924b966cc71e9e48920b2b635441aa50) wurde es jedoch im 4.6-Kernel festgeschrieben, wĂ€hrend das Problem schon vorher da war :(
Ah, also vielleicht nicht verwandt, es sei denn, es gibt mehrere Ursachen (leider gibt es viele Möglichkeiten, wie diese Art von Fehler ausgelöst werden kann, also ist dies eine Möglichkeit).
Wir persönlich haben hier mindestens mehrere Probleme angesprochen - in einigen davon diese
"unregister_netdevice"-Protokolle verschwinden nach einiger Zeit einfach und
Docker-Container können gut funktionieren, wÀhrend in anderen - alle Container
hÀngen geblieben und der Server muss neu gestartet werden.
TatsÀchlich verwenden wir vxlan nicht auf Servern, die diese Probleme haben - wir verwenden
einfache Bridges und Portweiterleitung (es geschieht unabhÀngig vom Userland-Proxy
die Einstellungen).
Am 30. Mai 2017, 22:54 Uhr, schrieb "hlrichardson" [email protected] :
Ah, also vielleicht nicht verwandt, es sei denn, es gibt mehrere Ursachen
(Leider gibt es viele Möglichkeiten, wie diese Art von Fehler ausgelöst werden kann, also
das ist eine Möglichkeit).â
Sie erhalten dies, weil Sie erwÀhnt wurden.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/moby/moby/issues/5618#issuecomment-304989068 oder stumm
der Faden
https://github.com/notifications/unsubscribe-auth/AAGqoDHe1n3h9_eJ2kmeWcbhKRCX6rZoks5r_HPbgaJpZM4B4L4Z
.
OK, wenn Sie keine vxlan-Tunnel verwenden, wird es definitiv nicht helfen.
Ăbrigens, wenn Sie beim Löschen eines Netzwerk-Namespaces (Container-Exit) eine einzelne Instanz der Meldung "unregister_netdevice" sehen, sollte dies als normale Situation angesehen werden, in der etwas, das auf ein Netdevice verweist, mehr oder weniger gleichzeitig mit dem Namespace bereinigt wurde
wurde gelöscht.
Der schwerwiegendere Fall ist, dass diese Nachricht alle 10 Sekunden wiederholt wird und nie aufhört ...
in diesem Fall wird eine globale Sperre fĂŒr immer gehalten, und da diese Sperre jedes Mal erworben werden muss, wenn Netzwerk
Namespace hinzugefĂŒgt oder gelöscht wird, auch jeder Versuch, einen Netzwerk-Namespace zu erstellen oder zu löschen
hĂ€ngt fĂŒr immer.
Wenn Sie eine ziemlich schmerzlose Möglichkeit haben, die zweite Art von Problem zu reproduzieren, wÀre ich daran interessiert
sich etwas ansehen.
@hlrichardson Wir sehen den zweiten Fall, den Sie oben erwÀhnt haben, auf einer Reihe unserer Server, dh eine Nachricht, die alle 10 Sekunden wiederholt wird. Welche Informationen soll ich teilen?
Sehen Sie dies auf Fedora 25, wÀhrend Sie centos:7- Container testen und bauen, wÀhrend Sie yum verwenden. Yum konnte das Herunterladen der Paketdatenbank nicht beenden und blieb auf unbestimmte Zeit hÀngen, weil das Netzwerk auf seltsame Weise nicht mehr funktionierte.
Hallo Leute,
Es gibt einen möglichen Patch fĂŒr den Kernel-Fehler (oder zumindest einen der Fehler) in der Linux-Net-dev-Mailingliste:
https://www.spinics.net/lists/netdev/msg442211.html
Es ist im Netzbaum zusammengefĂŒhrt, in der Warteschlange fĂŒr den stabilen Baum.
Laut https://github.com/torvalds/linux/commit/d747a7a51b00984127a88113cdbbc26f91e9d815 - es ist in 4.12 (die gestern veröffentlicht wurde)!
@fxposter @kevinxucs Ich werde morgen versuchen, dies auf den aktuellen CentOS-Kernel zurĂŒckzuportieren.
Ich verwende 4.12 (von http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.12/) und habe immer noch dieses Problem, also muss torvalds/ linux@d747a7a nicht die vollstÀndige Lösung sein.
$ uname -r
4.12.0-041200-generic
Ryan, hast du eine zuverlÀssige Methode zur Reproduktion?
Am 6. Juli 2017 um 16:29 Uhr schrieb "Ryan Campbell" [email protected] :
Ich verwende 4.12 (von http://kernel.ubuntu.com/~
kernel-ppa/mainline/v4.12/) und ich habe immer noch das gefunden, also torvalds/linux@
d747a7a https://github.com/torvalds/linux/commit/d747a7a darf nicht sein
die Komplettlösung.$ uname -r
4.12.0-041200-generischâ
Sie erhalten dies, weil Sie diesen Thread abonniert haben.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/moby/moby/issues/5618#issuecomment-313413120 oder stumm
der Faden
https://github.com/notifications/unsubscribe-auth/AAdcPCbVPDjPw6va-N5dM7CjYn2W4Bodks5sLO9ZgaJpZM4B4L4Z
.
@justincormack Leider habe ich kein Minimalbeispiel, das ich teilen kann, aber wir haben eine Testsuite, die viele Container erstellt und zerstört, und normalerweise waiting for lo to become free
in syslog) nach nur wenigen Iterationen.
@campbellr Ich habe das jetzt dreimal versucht zu waiting for lo to become free
Nachrichten zu erhalten, aber danach ohne AbstĂŒrze / HĂ€ngenbleiben. Ich versuche, den Testfall zu reduzieren, indem ich nur Netzwerk-Namespace und veth-Schnittstellen erstelle.
In Ihrer Testsuite:
Selbst teilweise Antworten auf die oben genannten Punkte können helfen, es einzugrenzen ...
Danke
@rn Docker hĂ€ngt nicht mehr, da es ein Timeout fĂŒr die Netlink-Anforderung festlegt, die normalerweise hĂ€ngen wĂŒrde. Aber Sie könnten keine neuen Container starten (oder vorhandene neu starten), wahrscheinlich wĂ€re die Containerbereinigung beim Stoppen auch seltsam.
Ich hatte noch keine Gelegenheit, 4.12 zu testen, konnte aber auf den kvm-Instanzen bei vultr zuverlĂ€ssig reproduzieren. Ich laufe Schwarm und meine kopflosen Chromarbeiter verursachen die Probleme, wenn sie die GesundheitsprĂŒfungen nicht bestehen oder regelmĂ€Ăig abstĂŒrzen. NatĂŒrlich habe ich zu diesem Zeitpunkt alle Crasher aufgespĂŒrt, die Netzwerkfehler sauber verarbeiten usw. Ich sehe also waiting for lo to become free
aber nicht oft genug, um Dinge fĂŒr ein paar Wochen aufzuhĂ€ngen.
Es scheint also, dass die Dinge, die bei der Reproduktion helfen, komplexere Netzwerkszenarien in Kombination mit groĂen Mengen an Verkehr in die Container, stĂ€ndigem Container-Recycling und KVM sind.
@rn Ich konnte dies auf einen bestimmten Container in unserer Testsuite
Nach 3 oder 4 Iterationen bekomme ich waiting for lo to become free
und bei der nÀchsten Iteration scheitert docker run
mit docker: Error response from daemon: containerd: container did not start before the specified timeout.
Haben Ihre Container viel NetzwerkaktivitÀt? Wenn ja, welche Richtung ist vorherrschend?
Eine ziemlich kleine Menge. In den oben genannten Schritten ist die http-Anfrage eine kleine Menge von JSON, und die Antwort ist ein binÀres Blob, das etwa 10 MB groà ist.
Auf welcher Art von Maschine fĂŒhren Sie diese aus (Anzahl der Kerne, ist es eine VM usw.)
Dies ist auf einem 4-Kern-Desktop-Computer (keine VM)
Erstellen Sie viele Container gleichzeitig?
Nein, alles wird seriell gemacht.
Verlassen Ihre Container normal oder stĂŒrzen sie ab?
Sie werden mit docker stop
gestoppt
- start container (ein interner Tornado-basierter Webdienst - ich versuche, ein minimales Beispiel zu extrahieren, das immer noch darauf trifft)
- Stellen Sie eine Anfrage an den Webdienst, der im Container ausgefĂŒhrt wird
- warte auf antwort
- BehÀlter töten
Ich habe einige Zeit damit verbracht, den Container zu entfernen, und es stellte sich heraus, dass der Webservice nichts mit dem Fehler zu tun hatte. Was dies in meinem Fall auszulösen scheint, ist das Mounten einer NFS-Freigabe in einem Container (der mit --privileged
).
Auf meinem Desktop kann ich einfach folgendes ein paar Mal zuverlÀssig reproduzieren:
$ docker run -it --rm --privileged alpine:latest /bin/mount -o nolock -o async -o vers=3 <my-nfs-server>:/export/foo /mnt
Kubernetes-Benutzer, ich habe _kops_ ein Problem geöffnet, um das nÀchste Kubernetes-AMI mit Kernel-Version 4.12 zu veröffentlichen. Willkommen, um es auszuprobieren: https://github.com/kubernetes/kops/issues/2901
Ich habe dies auch auf centos 7.3 mit Hostkernel 3.10.0-514.6.1.el7.x86_64 und docker-ce-17.06.0.ce-1.el7.centos.x86_64 getroffen.
@FrankYu das ist nicht hilfreich. Um sinnvoll an diesem Thread teilzunehmen, geben Sie bitte eine genaue Möglichkeit an, dieses Problem zu reproduzieren, und testen Sie bitte auf einem modernen Kernel. 3.10 wurde vor vier Jahren veröffentlicht, wir diskutieren darĂŒber, ob es behoben ist oder teilweise auf einem Release von vor vier Tagen basiert.
@danielgusmao unsere RancherOS- und AWS ECS AMI-Linux-Betriebssysteme haben diesen "Fix" bereits installiert (war wahrscheinlich der Standard) und behebt das Problem fĂŒr uns nicht. Wir sehen die Nachricht immer noch in den Protokollen. Die einzige Hoffnung ist wahrscheinlich, dass der Kernel-Patch weit zurĂŒckportiert wird. Obwohl ich mich umgesehen habe und in RedHat/Centos/AWS-Linux-Bugzillas und -Foren noch keine Anzeichen fĂŒr ernsthafte Fortschritte in dieser Richtung sehen kann.
Um es klar zu sagen, die Nachricht selbst ist gutartig , es ist der Kernel-Absturz nach den vom OP gemeldeten Nachrichten, was nicht der Fall ist.
Der Kommentar im Code, aus dem diese Nachricht stammt, erklÀrt, was passiert. GrundsÀtzlich erhöht jeder Benutzer, z. B. der IP-Stack) eines NetzwerkgerÀts (z. B. das Ende eines veth
Paares in einem Container) einen ReferenzzĂ€hler in der NetzwerkgerĂ€testruktur, wenn er das NetzwerkgerĂ€t verwendet. Wenn das GerĂ€t entfernt wird (z. B. wenn der Container entfernt wird), wird jeder Benutzer benachrichtigt, damit er einige Bereinigungen durchfĂŒhren kann (z. B. offene Sockets schlieĂen usw.), bevor der ReferenzzĂ€hler verringert wird. Da diese Bereinigung einige Zeit in Anspruch nehmen kann, insbesondere unter hoher Last (viele Schnittstellen, viele Verbindungen usw.), kann der Kernel die Nachricht hier und da ab und zu ausgeben .
Wenn ein Benutzer eines NetzwerkgerĂ€ts den ReferenzzĂ€hler nie verringert, wird ein anderer Teil des Kernels feststellen, dass die Aufgabe, die auf die Bereinigung wartet, hĂ€ngen bleibt und abstĂŒrzt. Nur dieser Absturz weist auf einen Kernel-Bug hin (einige Benutzer haben ĂŒber einen Codepfad den ReferenzzĂ€hler nicht verringert). Es gab mehrere solcher Fehler und sie wurden im modernen Kernel behoben (und möglicherweise auf Ă€ltere zurĂŒckportiert). Ich habe einige Stresstests geschrieben (und schreibe sie weiter), um solche AbstĂŒrze auszulösen, konnte sie aber auf modernen Kerneln nicht reproduzieren (ich tue jedoch die obige Meldung).
Bitte melden Sie dieses Problem nur, wenn Ihr Kernel tatsĂ€chlich abstĂŒrzt, und dann wĂ€ren wir sehr interessiert an:
uname -r
)Vielen Dank
[ @thaJeztah könnten Sie den Titel in etwas wie kernel crash after "unregister_netdevice: waiting for lo to become free. Usage count = 3"
Ă€ndern, um es deutlicher zu machen]
Sollte in Kernel 4.12 oder spĂ€ter behoben sein. Bitte prĂŒfen. https://access.redhat.com/solutions/3105941
und Link zum Patch https://github.com/torvalds/linux/commit/d747a7a51b00984127a88113cdbbc26f91e9d815
@drweber Sie finden diesen Patch auch in kommenden stabilen Releases (vorerst 4.11.12, 4.9.39, 4.4.78, 3.18.62)
@rn
Wenn ein Benutzer eines NetzwerkgerĂ€ts den ReferenzzĂ€hler nie verringert, wird ein anderer Teil des Kernels feststellen, dass die Aufgabe, die auf die Bereinigung wartet, hĂ€ngen bleibt und abstĂŒrzt. Nur dieser Absturz weist auf einen Kernel-Bug hin (einige Benutzer haben ĂŒber einen Codepfad den ReferenzzĂ€hler nicht verringert). Es gab mehrere solcher Fehler und sie wurden im modernen Kernel behoben (und möglicherweise auf Ă€ltere zurĂŒckportiert). Ich habe einige Stresstests geschrieben (und schreibe sie weiter), um solche AbstĂŒrze auszulösen, konnte sie aber auf modernen Kerneln nicht reproduzieren (ich tue jedoch die obige Meldung).
Bitte melden Sie dieses Problem nur, wenn Ihr Kernel tatsĂ€chlich abstĂŒrzt ...
Wir haben ein etwas anderes Problem in unserer Umgebung, von dem ich hoffe, dass es etwas geklĂ€rt wird (Kernel 3.16.0-77-generic, Ubuntu 14.04, docker 1.12.3-0~trusty. Wir haben Tausende von Hosts, auf denen Docker, 2 . lĂ€uft -3 Container pro Host, und wir sehen dies bei < 1% der gesamten Hosts, auf denen Docker ausgefĂŒhrt wird).
Wir sehen eigentlich nie den Kernel-Absturz, aber stattdessen (wie die ursprĂŒnglichen Reporter, soweit ich das beurteilen kann) ist der dockerd
Prozess nicht mehr aktiv. Upstart (mit dem Job /etc/init/docker.conf
aus dem Upstream-Paket) startet keinen neuen dockerd
Prozess, weil er denkt, dass er bereits lÀuft ( start: Job is already running: docker
) und versucht, den Upstart zu stoppen Job schlÀgt ebenfalls fehl ( docker start/killed, process <pid of defunct process>
).
$ ps -ely
S UID PID PPID C PRI NI RSS SZ WCHAN TTY TIME CMD
...
Z 0 28107 1 0 80 0 0 0 - ? 00:18:05 dockerd <defunct>
Da wir in dmesg
hauptsĂ€chlich mit Bridge-Netzwerken (auf einem benutzerdefinierten Bridge-GerĂ€t) arbeiten, sehen wir eine etwas andere Meldung bezĂŒglich der virtuellen Schnittstelle:
[7895942.484851] unregister_netdevice: waiting for vethb40dfbc to become free. Usage count = 1
[7895952.564852] unregister_netdevice: waiting for vethb40dfbc to become free. Usage count = 1
[7895962.656984] unregister_netdevice: waiting for vethb40dfbc to become free. Usage count = 1
Da Upstart den Neustart von dockerd zu verweigern scheint oder erkennt, dass der zuvor laufende Prozess ein Zombie ist, ist die einzige Lösung, die wir gefunden haben, den Host neu zu starten.
WĂ€hrend unser Ergebnis anders aussieht (der Kernel stĂŒrzt nicht ab), klingt die Ursache gleich oder Ă€hnlich. Ist das dann nicht das gleiche Problem? Gibt es eine bekannte Problemumgehung oder eine Möglichkeit, den Upstart-Job docker
wieder lauffÀhig zu machen, wenn dies auftritt?
@campbellr Ich kann dieses Problem mit Ihrem Ansatz auf Kernel 4.12.2-1 reproduzieren.
Ăbrigens, wenn ich den NFS-Speicher unmounte, bevor der Container gestoppt wird, tritt dieses Problem nicht auf.
gleiches Problem.
[root<strong i="6">@docker1</strong> ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
[root<strong i="7">@docker1</strong> ~]# uname -r
3.10.0-514.26.2.el7.x86_64
[root<strong i="8">@docker1</strong> ~]# docker version
Client:
Version: 1.12.6
API version: 1.24
Package version: docker-1.12.6-32.git88a4867.el7.centos.x86_64
Go version: go1.7.4
Git commit: 88a4867/1.12.6
Built: Mon Jul 3 16:02:02 2017
OS/Arch: linux/amd64
Server:
Version: 1.12.6
API version: 1.24
Package version: docker-1.12.6-32.git88a4867.el7.centos.x86_64
Go version: go1.7.4
Git commit: 88a4867/1.12.6
Built: Mon Jul 3 16:02:02 2017
OS/Arch: linux/amd64
Hi,
Ich habe gerade 2 Repos https://github.com/piec/docker-samba-loop und https://github.com/piec/docker-nfs-loop erstellt , die das notwendige Setup enthalten, um diesen Fehler zu reproduzieren
Meine Ergebnisse:
docker-samba-loop
in einigen Iterationen (<10). Ich kann es nicht reproduzieren mit docker-nfs-loop
docker-samba-loop
, docker-nfs-loop
nicht ausprobiertHoffe das hilft
Danke schön
Ein Workaround ist, in meinem Fall --net=host
zu verwenden. Aber es ist nicht immer eine akzeptable Lösung
@piec , vielen Dank fĂŒr die Details. Am Ende dieses sehr langen Kommentars habe ich noch ein paar Fragen an Sie.
Mit dem SMB-Setup konnte ich eine Reihe von Dingen mit verschiedenen Kerneln produzieren. Ich habe dies auch mit dem NFS-Setup versucht, aber keine WĂŒrfel.
Alle Tests werden mit Docker 17.06.1-ce auf HyperKit mit einer VM ausgefĂŒhrt, die mit 2 vCPUs und 2 GB Arbeitsspeicher konfiguriert ist (ĂŒber Docker fĂŒr Mac, aber das sollte keine Rolle spielen). Ich verwende LinuxKit-Kernel, weil ich sie leicht austauschen kann.
Ich habe Ihr Dockerfile
modifiziert, indem ich als ersten ausgefĂŒhrten Befehl einen Aufruf zu date
hinzugefĂŒgt habe und auch einen Aufruf zu date
vor und nach dem docker run
fĂŒr die Klient.
Mit 4.9.39 (neuester stabiler 4.9.x-Kernel) bekomme ich einen Kernel-Absturz:
# while true; do date; docker run -it --rm --name client-smb --cap-add=SYS_ADMIN --cap-add DAC_READ_SEARCH --link samba:samba client-smb:1; date; sleep 1; done
Thu 27 Jul 2017 14:12:51 BST
+ date
Thu Jul 27 13:12:52 UTC 2017
+ mount.cifs //172.17.0.2/public /mnt/ -o vers=3.0,user=nobody,password=
+ date
Thu Jul 27 13:12:52 UTC 2017
+ ls -la /mnt
total 1028
drwxr-xr-x 2 root root 0 Jul 27 10:11 .
drwxr-xr-x 1 root root 4096 Jul 27 13:12 ..
-rwxr-xr-x 1 root root 3 Jul 27 10:11 bla
+ umount /mnt
+ echo umount ok
umount ok
Thu 27 Jul 2017 14:12:52 BST
Thu 27 Jul 2017 14:12:53 BST
---> First iteration suceeds and then hangs on the docker run
und in dmesg
:
[ 268.347598] BUG: unable to handle kernel paging request at 0000000100000015
[ 268.348072] IP: [<ffffffff8c64ea95>] sk_filter_uncharge+0x5/0x31
[ 268.348411] PGD 0 [ 268.348517]
[ 268.348614] Oops: 0000 [#1] SMP
[ 268.348789] Modules linked in:
[ 268.348971] CPU: 1 PID: 2221 Comm: vsudd Not tainted 4.9.39-linuxkit #1
[ 268.349330] Hardware name: BHYVE, BIOS 1.00 03/14/2014
[ 268.349620] task: ffff8b6ab8eb5100 task.stack: ffffa015c113c000
[ 268.349995] RIP: 0010:[<ffffffff8c64ea95>] [<ffffffff8c64ea95>] sk_filter_uncharge+0x5/0x31
[ 268.350509] RSP: 0018:ffffa015c113fe10 EFLAGS: 00010202
[ 268.350818] RAX: 0000000000000000 RBX: ffff8b6ab7eee6a8 RCX: 0000000000000006
[ 268.351231] RDX: 00000000ffffffff RSI: 00000000fffffffd RDI: ffff8b6ab7eee400
[ 268.351636] RBP: ffff8b6ab7eee400 R08: 0000000000000000 R09: 0000000000000000
[ 268.352022] R10: ffffa015c101fcb0 R11: 0000000000000000 R12: 0000000000000000
[ 268.352409] R13: ffff8b6ab7eee4a8 R14: ffff8b6ab7f8e340 R15: 0000000000000000
[ 268.352796] FS: 00007f03f62e3eb0(0000) GS:ffff8b6abc700000(0000) knlGS:0000000000000000
[ 268.353234] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 268.353546] CR2: 0000000100000015 CR3: 00000000782d2000 CR4: 00000000000406a0
[ 268.353961] Stack:
[ 268.354106] ffffffff8c625054 ffff8b6ab7eee400 ffffa015c113fe88 0000000000000000
[ 268.354526] ffffffff8c74ed96 01000008bc718980 0000000000000000 0000000000000000
[ 268.354965] de66927a28223151 ffff8b6ab4443a40 ffffa015c101fcb0 ffff8b6ab4443a70
[ 268.355384] Call Trace:
[ 268.355523] [<ffffffff8c625054>] ? __sk_destruct+0x35/0x133
[ 268.355822] [<ffffffff8c74ed96>] ? unix_release_sock+0x1df/0x212
[ 268.356164] [<ffffffff8c74ede2>] ? unix_release+0x19/0x25
[ 268.356454] [<ffffffff8c62034c>] ? sock_release+0x1a/0x6c
[ 268.356742] [<ffffffff8c6203ac>] ? sock_close+0xe/0x11
[ 268.357019] [<ffffffff8c1f8710>] ? __fput+0xdd/0x17b
[ 268.357288] [<ffffffff8c0f604d>] ? task_work_run+0x64/0x7a
[ 268.357583] [<ffffffff8c003285>] ? prepare_exit_to_usermode+0x7d/0xa4
[ 268.357925] [<ffffffff8c7d2884>] ? entry_SYSCALL_64_fastpath+0xa7/0xa9
[ 268.358268] Code: 08 4c 89 e7 e8 fb f8 ff ff 48 3d 00 f0 ff ff 77 06 48 89 45 00 31 c0 48 83 c4 10 5b 5d 41 5c 41 5d 41 5e 41 5f c3 0f 1f 44 00 00 <48> 8b 46 18 8b 40 04 48 8d 04 c5 28 00 00 00 f0 29 87 24 01 00
[ 268.359776] RIP [<ffffffff8c64ea95>] sk_filter_uncharge+0x5/0x31
[ 268.360118] RSP <ffffa015c113fe10>
[ 268.360311] CR2: 0000000100000015
[ 268.360550] ---[ end trace 4a7830b42d5acfb3 ]---
[ 268.360861] Kernel panic - not syncing: Fatal exception
[ 268.361217] Kernel Offset: 0xb000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
[ 268.361789] Rebooting in 120 seconds..
Manchmal sehe ich mehrere Iterationen dessen, was der 4.11.12-Kernel tut, einschlieĂlich der unregister_netdevice
Meldungen (siehe unten) und bekomme dann den Kernel-Absturz oben. Manchmal sehe ich leichte Variationen fĂŒr den Absturz, wie zum Beispiel:
[ 715.926694] BUG: unable to handle kernel paging request at 00000000fffffdc9
[ 715.927380] IP: [<ffffffff8664ea95>] sk_filter_uncharge+0x5/0x31
[ 715.927868] PGD 0 [ 715.928022]
[ 715.928174] Oops: 0000 [#1] SMP
[ 715.928424] Modules linked in:
[ 715.928703] CPU: 0 PID: 2665 Comm: runc:[0:PARENT] Not tainted 4.9.39-linuxkit #1
[ 715.929321] Hardware name: BHYVE, BIOS 1.00 03/14/2014
[ 715.929765] task: ffff931538ef4140 task.stack: ffffbcbbc0214000
[ 715.930279] RIP: 0010:[<ffffffff8664ea95>] [<ffffffff8664ea95>] sk_filter_uncharge+0x5/0x31
[ 715.931043] RSP: 0018:ffffbcbbc0217be0 EFLAGS: 00010206
[ 715.931487] RAX: 0000000000000000 RBX: ffff931532a662a8 RCX: 0000000000000006
[ 715.932043] RDX: 00000000ffffffff RSI: 00000000fffffdb1 RDI: ffff931532a66000
[ 715.932612] RBP: ffff931532a66000 R08: 0000000000000000 R09: 0000000000000000
[ 715.933181] R10: ffff9315394f2990 R11: 000000000001bb68 R12: ffff931532a66000
[ 715.933725] R13: ffff9315328060a8 R14: ffff931532a66340 R15: 0000000000000000
[ 715.934258] FS: 0000000000000000(0000) GS:ffff93153c600000(0000) knlGS:0000000000000000
[ 715.934857] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 715.935286] CR2: 00000000fffffdc9 CR3: 0000000052c09000 CR4: 00000000000406b0
[ 715.935822] Stack:
[ 715.935974] ffffffff86625054 ffff931532806000 ffffbcbbc0217c58 ffff931532a66000
[ 715.936560] ffffffff8674ed37 0100000800000282 0000000000000000 0000000000000000
[ 715.937173] 5de0b9a3a313c00b ffff9315346f5080 ffff9315394f2990 ffff9315346f50b0
[ 715.937751] Call Trace:
[ 715.937982] [<ffffffff86625054>] ? __sk_destruct+0x35/0x133
[ 715.938608] [<ffffffff8674ed37>] ? unix_release_sock+0x180/0x212
[ 715.939130] [<ffffffff8674ede2>] ? unix_release+0x19/0x25
[ 715.939517] [<ffffffff8662034c>] ? sock_release+0x1a/0x6c
[ 715.939907] [<ffffffff866203ac>] ? sock_close+0xe/0x11
[ 715.940277] [<ffffffff861f8710>] ? __fput+0xdd/0x17b
[ 715.940635] [<ffffffff860f604d>] ? task_work_run+0x64/0x7a
[ 715.941072] [<ffffffff860e148a>] ? do_exit+0x42a/0x8e0
[ 715.941472] [<ffffffff8674edfa>] ? scm_destroy+0xc/0x25
[ 715.941880] [<ffffffff867504e0>] ? unix_stream_sendmsg+0x2dd/0x30b
[ 715.942357] [<ffffffff860e19aa>] ? do_group_exit+0x3c/0x9d
[ 715.942780] [<ffffffff860eac41>] ? get_signal+0x45d/0x4e2
[ 715.943210] [<ffffffff86621640>] ? sock_sendmsg+0x2d/0x3c
[ 715.943618] [<ffffffff8602055a>] ? do_signal+0x36/0x4c9
[ 715.944017] [<ffffffff861f64c7>] ? __vfs_write+0x8f/0xcc
[ 715.944416] [<ffffffff861f7100>] ? vfs_write+0xbb/0xc7
[ 715.944809] [<ffffffff8600326c>] ? prepare_exit_to_usermode+0x64/0xa4
[ 715.945295] [<ffffffff867d2884>] ? entry_SYSCALL_64_fastpath+0xa7/0xa9
[ 715.945789] Code: 08 4c 89 e7 e8 fb f8 ff ff 48 3d 00 f0 ff ff 77 06 48 89 45 00 31 c0 48 83 c4 10 5b 5d 41 5c 41 5d 41 5e 41 5f c3 0f 1f 44 00 00 <48> 8b 46 18 8b 40 04 48 8d 04 c5 28 00 00 00 f0 29 87 24 01 00
[ 715.947701] RIP [<ffffffff8664ea95>] sk_filter_uncharge+0x5/0x31
[ 715.948112] RSP <ffffbcbbc0217be0>
[ 715.948292] CR2: 00000000fffffdc9
[ 715.948467] ---[ end trace 2d69bea56725fd5f ]---
[ 715.948722] Kernel panic - not syncing: Fatal exception
[ 715.949059] Kernel Offset: 0x5000000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)
[ 715.949595] Rebooting in 120 seconds..
Die AbstĂŒrze sind im Unix-Domain-Socket-Code und Ă€hnlich/identisch mit dem, was ist
berichtet hier , obwohl es mit diesem neuen Testfall viel einfacher zu reproduzieren ist.
Mit 4.11.12 (das ist das neueste Stable in der 4.11-Serie) sehe ich keine AbstĂŒrze, aber es ist wirklich langsam (Anmerkungen inline mit --->
):
# while true; do date; docker run -it --rm --name client-smb --cap-add=SYS_ADMIN --cap-add DAC_READ_SEARCH --link samba:samba client-smb:1; date; sleep 1; done
Thu 27 Jul 2017 13:48:04 BST
+ date
Thu Jul 27 12:48:05 UTC 2017
+ mount.cifs //172.17.0.2/public /mnt/ -o vers=3.0,user=nobody,password=
+ date
Thu Jul 27 12:48:05 UTC 2017
+ ls -la /mnt
total 1028
drwxr-xr-x 2 root root 0 Jul 27 10:11 .
drwxr-xr-x 1 root root 4096 Jul 27 12:48 ..
-rwxr-xr-x 1 root root 3 Jul 27 10:11 bla
+ umount /mnt
+ echo umount ok
umount ok
Thu 27 Jul 2017 13:48:05 BST
---> First iteration takes one second
Thu 27 Jul 2017 13:48:06 BST
docker: Error response from daemon: containerd: container did not start before the specified timeout.
Thu 27 Jul 2017 13:50:07 BST
---> Second iteration fails after 2 minutes with dockerd unable to start the container
Thu 27 Jul 2017 13:50:08 BST
+ date
Thu Jul 27 12:51:52 UTC 2017
+ mount.cifs //172.17.0.2/public /mnt/ -o vers=3.0,user=nobody,password=
+ date
Thu Jul 27 12:51:53 UTC 2017
+ ls -la /mnt
total 1028
drwxr-xr-x 2 root root 0 Jul 27 10:11 .
drwxr-xr-x 1 root root 4096 Jul 27 12:50 ..
-rwxr-xr-x 1 root root 3 Jul 27 10:11 bla
+ umount /mnt
+ echo umount ok
umount ok
Thu 27 Jul 2017 13:51:53 BST
---> Third iterations succeeds, BUT it takes almost 2 minutes between docker run and the container running
Thu 27 Jul 2017 13:51:54 BST
docker: Error response from daemon: containerd: container did not start before the specified timeout.
Thu 27 Jul 2017 13:53:55 BST
---> Fourth iteration fails after two minutes
Thu 27 Jul 2017 13:53:56 BST
+ date
Thu Jul 27 12:55:37 UTC 2017
+ mount.cifs //172.17.0.2/public /mnt/ -o vers=3.0,user=nobody,password=
+ date
Thu Jul 27 12:55:37 UTC 2017
+ ls -la /mnt
total 1028
drwxr-xr-x 2 root root 0 Jul 27 10:11 .
drwxr-xr-x 1 root root 4096 Jul 27 12:53 ..
-rwxr-xr-x 1 root root 3 Jul 27 10:11 bla
+ umount /mnt
+ echo umount ok
umount ok
Thu 27 Jul 2017 13:55:38 BST
---> Fifth iteration succeeds, but almost 2 minutes between docker run and the container executing
Ich lieà dies ungefÀhr eine Stunde lang laufen, wobei sich das gleiche Muster wiederholte, aber kein Kernel-Absturz.
In den Kernel-Logs sehe ich viele:
[ 84.940380] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 95.082151] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 105.253289] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 115.477095] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 125.627059] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 135.789298] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 145.969455] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 156.101126] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 166.303333] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 176.445791] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 186.675958] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 196.870265] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 206.998238] unregister_netdevice: waiting for lo to become free. Usage count = 1
[...]
Das ist eine Nachricht alle zehn Sekunden.
Da dies nicht dazu fĂŒhrt, dass die Erkennung hĂ€ngender Aufgaben auch nach einer Stunde einsetzt, vermute ich, dass mit 4.11.12 der ReferenzzĂ€hler schlieĂlich dekrementiert und das GerĂ€t freigegeben wird, aber nach den Intervallen, in denen ich Container ausfĂŒhren kann, kann es dauern bis zu 4 Minuten!
Der Kernel-Absturz im OP zeigte an, dass der Kernel abgestĂŒrzt ist, weil eine aufgehĂ€ngte Aufgabe erkannt wurde. Ich habe diesen Absturz bei meinen Tests nicht gesehen, daher habe ich die Einstellung sysctl
Bezug auf die Erkennung hÀngender Aufgaben geÀndert:
# sysctl -a | grep kernel.hung_task
kernel.hung_task_check_count = 4194304
kernel.hung_task_panic = 0
kernel.hung_task_timeout_secs = 120
kernel.hung_task_warnings = 10
# sysctl -w kernel.hung_task_timeout_secs = 60
# sysctl -w kernel.hung_task_panic=1
Dies reduziert das Timeout auf 60 Sekunden und versetzt den Kernel in Panik, wenn ein hÀngender Task erkannt wurde. Da es etwa 2 Minuten dauert, bis sich dockerd
beschwert hat, dass containerd
nicht gestartet wurde, sollte die Reduzierung der Erkennung hÀngender Aufgaben auf 60s eine Kernel-Panik auslösen, wenn eine einzelne Aufgabe hÀngen blieb. Leider gab es keinen Absturz in den Protokollen
Als nÀchstes erhöhe ich die sleep
nach jedem docker run
auf 5 Minuten, um zu sehen, ob die Nachrichten kontinuierlich sind. In diesem Fall scheinen alle docker run
s zu funktionieren, was irgendwie zu erwarten ist, da aus den vorherigen Experimenten ein docker run
alle 4 Minuten oder so funktionieren wĂŒrde
---> This is after the first run
[ 281.406660] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 291.455945] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 301.721340] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 311.988572] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 322.258805] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 332.527383] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 342.796511] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 353.059499] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 363.327472] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 373.365562] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 383.635923] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 393.684949] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 403.950186] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 414.221779] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 424.490110] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 434.754925] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 445.022243] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 455.292106] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 465.557462] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 475.826946] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 486.097833] unregister_netdevice: waiting for lo to become free. Usage count = 1
---> 200+ seconds of messages and then nothing for almost 400 seconds
[ 883.924399] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 893.975810] unregister_netdevice: waiting for lo to become free. Usage count = 1
...
[ 1088.624065] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 1098.891297] unregister_netdevice: waiting for lo to become free. Usage count = 1
---> 200+ seconds of messages and then a gap of 90 seconds
[ 1185.119327] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 1195.387962] unregister_netdevice: waiting for lo to become free. Usage count = 1
...
[ 1390.040035] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 1400.307359] unregister_netdevice: waiting for lo to become free. Usage count = 1
---> 200+ seconds of messages and then a gap of 80+ seconds
[ 1486.325724] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 1496.591715] unregister_netdevice: waiting for lo to become free. Usage count = 1
...
[ 1680.987216] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 1691.255068] unregister_netdevice: waiting for lo to become free. Usage count = 1
---> 200+ seconds of messages and then a gap of 90+ seconds
[ 1787.547334] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 1797.819703] unregister_netdevice: waiting for lo to become free. Usage count = 1
Es sieht so aus, als wĂŒrden wir auf fast jedem docker run
ungefÀhr 200 Sekunden im Wert von unregister_netdevice
docker run
(auĂer dem zweiten). Ich vermute, dass wir wĂ€hrend dieser Zeit keine neuen Container starten können (wie in Experiment 2 gezeigt). Es ist merkwĂŒrdig, dass die Erkennung hĂ€ngender Aufgaben nicht aktiviert wird, vermutlich weil keine Aufgabe hĂ€ngen ist.
Dies ist das ZurĂŒckkehren in 1s Schlaf zwischen docker run
Wir haben einen anderen Kernel, der eine Reihe zusÀtzlicher Debugs ermöglichte
Optionen wie LOCKDEP
, RCU_TRACE
, LOCKUP_DETECTOR
und ein paar
mehr.
Das AusfĂŒhren des Repro-Kernels 4.11.12 mit diesen aktivierten Debug-Optionen hat nichts ausgelöst.
Dito fĂŒr den Kernel 4.9.39, wo der normale Kernel abstĂŒrzt. Die Debug-Optionen Ă€ndern das Timing geringfĂŒgig, so dass dies möglicherweise ein zusĂ€tzlicher Hinweis darauf ist, dass der Absturz im Unix-Domain-Socket-Code auf ein Rennen zurĂŒckzufĂŒhren ist.
strace
bei den verschiedenen containerd
Prozessen ist nicht hilfreich (es
normalerweise nicht, weil es in Go geschrieben ist). Viele lange StÀnde in
futex(...FUTEX_WAIT...)
mit Informationen zum Wo/Warum.
Einige stöbern mit sysrq
herum:
Erhöhen Sie die AusfĂŒhrlichkeit:
echo 9 > /proc/sysrq-trigger
Stacktrace von allen CPUs:
echo l > /proc/sysrq-trigger
[ 1034.298202] sysrq: SysRq : Show backtrace of all active CPUs
[ 1034.298738] NMI backtrace for cpu 1
[ 1034.299073] CPU: 1 PID: 2235 Comm: sh Tainted: G B 4.11.12-linuxkit #1
[ 1034.299818] Hardware name: BHYVE, BIOS 1.00 03/14/2014
[ 1034.300286] Call Trace:
[ 1034.300517] dump_stack+0x82/0xb8
[ 1034.300827] nmi_cpu_backtrace+0x75/0x87
[ 1034.301200] ? irq_force_complete_move+0xf1/0xf1
[ 1034.301633] nmi_trigger_cpumask_backtrace+0x6e/0xfd
[ 1034.302097] arch_trigger_cpumask_backtrace+0x19/0x1b
[ 1034.302560] ? arch_trigger_cpumask_backtrace+0x19/0x1b
[ 1034.302989] sysrq_handle_showallcpus+0x17/0x19
[ 1034.303438] __handle_sysrq+0xe4/0x172
[ 1034.303826] write_sysrq_trigger+0x47/0x4f
[ 1034.304210] proc_reg_write+0x5d/0x76
[ 1034.304507] __vfs_write+0x35/0xc8
[ 1034.304773] ? rcu_sync_lockdep_assert+0x12/0x52
[ 1034.305132] ? __sb_start_write+0x152/0x189
[ 1034.305458] ? file_start_write+0x27/0x29
[ 1034.305770] vfs_write+0xda/0x100
[ 1034.306029] SyS_write+0x5f/0xa3
[ 1034.306283] entry_SYSCALL_64_fastpath+0x1f/0xc2
[ 1034.306638] RIP: 0033:0x7fa4810488a9
[ 1034.306976] RSP: 002b:00007fffd3a29828 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
[ 1034.307567] RAX: ffffffffffffffda RBX: 000000c6b523a020 RCX: 00007fa4810488a9
[ 1034.308101] RDX: 0000000000000002 RSI: 000000c6b5239d00 RDI: 0000000000000001
[ 1034.308635] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
[ 1034.309169] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
[ 1034.309700] R13: 0000000000000000 R14: 00007fffd3a29988 R15: 00007fa481280ee0
[ 1034.310334] Sending NMI from CPU 1 to CPUs 0:
[ 1034.310710] NMI backtrace for cpu 0 skipped: idling at pc 0xffffffffa0922756
Nichts hier, CPU1 ist im Leerlauf, CPU0 verarbeitet die sysrq.
Gesperrte Aufgaben anzeigen (zweimal)
echo w > /proc/sysrq-trigger
[ 467.167062] sysrq: SysRq : Show Blocked State
[ 467.167731] task PC stack pid father
[ 467.168580] kworker/u4:6 D 0 293 2 0x00000000
[ 467.169096] Workqueue: netns cleanup_net
[ 467.169487] Call Trace:
[ 467.169732] __schedule+0x582/0x701
[ 467.170073] schedule+0x89/0x9a
[ 467.170338] schedule_timeout+0xbf/0xff
[ 467.170666] ? del_timer_sync+0xc1/0xc1
[ 467.171011] schedule_timeout_uninterruptible+0x2a/0x2c
[ 467.171422] ? schedule_timeout_uninterruptible+0x2a/0x2c
[ 467.171866] msleep+0x1e/0x22
[ 467.172155] netdev_run_todo+0x173/0x2c4
[ 467.172499] rtnl_unlock+0xe/0x10
[ 467.172770] default_device_exit_batch+0x13c/0x15f
[ 467.173226] ? __wake_up_sync+0x12/0x12
[ 467.173550] ops_exit_list+0x29/0x53
[ 467.173850] cleanup_net+0x1a8/0x261
[ 467.174153] process_one_work+0x276/0x4fb
[ 467.174487] worker_thread+0x1eb/0x2ca
[ 467.174800] ? rescuer_thread+0x2d9/0x2d9
[ 467.175136] kthread+0x106/0x10e
[ 467.175406] ? __list_del_entry+0x22/0x22
[ 467.175737] ret_from_fork+0x2a/0x40
[ 467.176167] runc:[1:CHILD] D 0 2609 2606 0x00000000
[ 467.176636] Call Trace:
[ 467.176849] __schedule+0x582/0x701
[ 467.177152] schedule+0x89/0x9a
[ 467.177451] schedule_preempt_disabled+0x15/0x1e
[ 467.177827] __mutex_lock+0x2a0/0x3ef
[ 467.178133] ? copy_net_ns+0xbb/0x17c
[ 467.178456] mutex_lock_killable_nested+0x1b/0x1d
[ 467.179068] ? mutex_lock_killable_nested+0x1b/0x1d
[ 467.179489] copy_net_ns+0xbb/0x17c
[ 467.179798] create_new_namespaces+0x12b/0x19b
[ 467.180151] unshare_nsproxy_namespaces+0x8f/0xaf
[ 467.180569] SyS_unshare+0x17b/0x302
[ 467.180925] entry_SYSCALL_64_fastpath+0x1f/0xc2
[ 467.181303] RIP: 0033:0x737b97
[ 467.181559] RSP: 002b:00007fff1965ab18 EFLAGS: 00000246 ORIG_RAX: 0000000000000110
[ 467.182182] RAX: ffffffffffffffda RBX: 0000000002277bd8 RCX: 0000000000737b97
[ 467.182805] RDX: 0000000000000000 RSI: 0000000000867a0f RDI: 000000006c020000
[ 467.183368] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
[ 467.184014] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
[ 467.184639] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
[ 477.286653] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 487.457828] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 497.659654] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 507.831614] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 518.030241] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 528.232963] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 538.412263] unregister_netdevice: waiting for lo to become free. Usage count = 1
[ 548.583610] unregister_netdevice: waiting for lo to become free. Usage count = 1
echo w > /proc/sysrq-trigger
[ 553.969592] sysrq: SysRq : Show Blocked State
[ 553.970411] task PC stack pid father
[ 553.971208] kworker/u4:6 D 0 293 2 0x00000000
[ 553.971686] Workqueue: netns cleanup_net
[ 553.972058] Call Trace:
[ 553.972305] __schedule+0x582/0x701
[ 553.972690] schedule+0x89/0x9a
[ 553.973039] schedule_timeout+0xbf/0xff
[ 553.973462] ? del_timer_sync+0xc1/0xc1
[ 553.973890] schedule_timeout_uninterruptible+0x2a/0x2c
[ 553.974706] ? schedule_timeout_uninterruptible+0x2a/0x2c
[ 553.975244] msleep+0x1e/0x22
[ 553.975539] netdev_run_todo+0x173/0x2c4
[ 553.975950] rtnl_unlock+0xe/0x10
[ 553.976303] default_device_exit_batch+0x13c/0x15f
[ 553.976725] ? __wake_up_sync+0x12/0x12
[ 553.977121] ops_exit_list+0x29/0x53
[ 553.977501] cleanup_net+0x1a8/0x261
[ 553.977869] process_one_work+0x276/0x4fb
[ 553.978245] worker_thread+0x1eb/0x2ca
[ 553.978578] ? rescuer_thread+0x2d9/0x2d9
[ 553.978933] kthread+0x106/0x10e
[ 553.979283] ? __list_del_entry+0x22/0x22
[ 553.979774] ret_from_fork+0x2a/0x40
[ 553.980244] runc:[1:CHILD] D 0 2609 2606 0x00000000
[ 553.980728] Call Trace:
[ 553.980949] __schedule+0x582/0x701
[ 553.981254] schedule+0x89/0x9a
[ 553.981533] schedule_preempt_disabled+0x15/0x1e
[ 553.981917] __mutex_lock+0x2a0/0x3ef
[ 553.982220] ? copy_net_ns+0xbb/0x17c
[ 553.982524] mutex_lock_killable_nested+0x1b/0x1d
[ 553.982909] ? mutex_lock_killable_nested+0x1b/0x1d
[ 553.983311] copy_net_ns+0xbb/0x17c
[ 553.983606] create_new_namespaces+0x12b/0x19b
[ 553.983977] unshare_nsproxy_namespaces+0x8f/0xaf
[ 553.984363] SyS_unshare+0x17b/0x302
[ 553.984663] entry_SYSCALL_64_fastpath+0x1f/0xc2
[ 553.985080] RIP: 0033:0x737b97
[ 553.985306] RSP: 002b:00007fff1965ab18 EFLAGS: 00000246 ORIG_RAX: 0000000000000110
[ 553.985861] RAX: ffffffffffffffda RBX: 0000000002277bd8 RCX: 0000000000737b97
[ 553.986383] RDX: 0000000000000000 RSI: 0000000000867a0f RDI: 000000006c020000
[ 553.986811] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000
[ 553.987182] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
[ 553.987551] R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
/ # [ 558.844761] unregister_netdevice: waiting for lo to become free. Usage count = 1
Dies zeigt, dass sowohl die Arbeitswarteschlangen netns
als auch cleanup_net
beschÀftigt sind. Ich habe hier vor einiger Zeit ein etwas verwandtes Problem cleanup_net
Arbeitswarteschlange in einem anderen Zustand.
unregister_netdev
Meldungen scheinen nichts mit dem letzten Fix zu tun zu haben (der sowohl in 4.9.39 als auch in 4.11.12) enthalten ist. Dies liegt möglicherweise daran, dass die cleanup_net
Arbeitswarteschlange nicht voranschreitet und daher die Nachricht gedruckt wird.runc
, vielleicht sollte ich containerd
versuchen.Ich werde noch ein bisschen graben und dann eine Zusammenfassung an netdev
senden.
@piec hast du Konsolenzugriff und kannst sehen, ob es etwas in Bezug auf Crash-Dump gibt oder siehst du auch nur riesige Verzögerungen, wie ich sehe? Wenn Sie einen Crash-Dump haben, wÀre ich sehr daran interessiert, ihn zu sehen. Laufen Sie auch auf Bare Metal oder in einer VM? Wie sieht Ihre Konfiguration in Bezug auf CPUs und Speicher aus?
@rn danke fĂŒr die Untersuchungen!
Ich laufe auf einem Bare-Metal-Desktop-PC, damit ich auf alles zugreifen kann. Es ist ein i7-4790K + 32 GiB.
Aktuell laufe ich auf einem aktuellen Arch Linux + Kernel aus dem Testing Repo (4.12.3-1-ARCH)
In meinem Fall verhÀlt sich alles so, wie Sie es in Ihrem Experiment 2 (4.11.12 Kernel) beschreiben:
unregister_netdevice: waiting for lo to become free. Usage count = 1
wiederholt angezeigt, wenn ich versuche, einen neuen Container in der Verzögerung von mehr als 4 Minuten auszufĂŒhren, nachdem der Client-smb beendet wurde. Und erscheint nur, wenn Sie in diesen 4 Minuten einen neuen Container ausfĂŒhren. Das AusfĂŒhren eines neuen Containers nach diesen 4 Minuten ist "normal"Ich nehme an, es gibt irgendwo beim Bereinigungsprozess des smb-client-Containers ein Problem im Zusammenhang mit Netzwerkschnittstellen
Es gibt tatsĂ€chlich eine viel einfachere Reproduktion dieses Problems (was ĂŒbrigens nicht das ursprĂŒngliche Problem ist).
Dieses Skript startet einfach einen SMB-Server auf dem Host und erstellt dann einen Netzwerk-Namespace mit einem veth
Paar, fĂŒhrt mount; ls; unmount
im Netzwerk-Namespace aus und entfernt dann den Netzwerk-Namespace.
apk add --no-cache iproute2 samba samba-common-tools cifs-utils
# SMB server setup
cat <<EOF > /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
netbios name = FOO
passdb backend = tdbsam
security = user
guest account = nobody
strict locking = no
min protocol = SMB2
[public]
path = /share
browsable = yes
read only = no
guest ok = yes
browseable = yes
create mask = 777
EOF
adduser -D -G nobody nobody && smbpasswd -a -n nobody
mkdir /share && chmod ugo+rwx /share && touch /share/foo
chown -R nobody.nobody /share
# Bring up a veth pair
ip link add hdev type veth peer name nsdev
ip addr add 10.0.0.1/24 dev hdev
ip link set hdev up
# Start SMB server and sleep for it to serve
smbd -D; sleep 5
# Client setup
ip netns add client-ns
ip link set nsdev netns client-ns
ip netns exec client-ns ip addr add 10.0.0.2/24 dev nsdev
ip netns exec client-ns ip link set lo up
ip netns exec client-ns ip link set nsdev up
sleep 1 # wait for the devices to come up
# Execute (mount, ls, unmount) in the network namespace and a new mount namespace
ip netns exec client-ns unshare --mount \
/bin/sh -c 'mount.cifs //10.0.0.1/public /mnt -o vers=3.0,guest; ls /mnt; umount /mnt'
# Delete the client network namespace.
ip netns del client-ns
# Create a new network namespace
# This will stall for up to 200s
ip netns add new-netns
Beachten Sie, dass das HinzufĂŒgen eines einfachen sleep 1
nach dem Unmount, entweder bei der AusfĂŒhrung im Namespace oder vor dem Löschen des Netzwerk-Namespace, funktioniert, ohne beim Erstellen des neuen Namespace zu stoppen. Ein Sleep nach dem Löschen des alten Namespace reduziert das AbwĂŒrgen nicht.
@piec Ich habe dies auch mit deinem Repro und einem sleep 1
im Dockerfile nach dem Unmounten getestet und alles funktioniert wie erwartet, kein AbwĂŒrgen, keine unregister_netdev
Meldungen.
Ich schreibe das jetzt auf und sende es an netdev@vger
Exzellent
Ich bestÀtige, dass ein sleep
nach dem Unmounten von Fixes ins Stocken geraten und unregister_netdev
in meinem Setup angezeigt wird
Glaubst du nicht, dass umount
eine asynchrone Aktion in Bezug auf ihre Netns generiert, die blockiert und schlieĂlich ablĂ€uft, wenn die Netns entfernt wird, bevor diese Aktion beendet ist? Ein Schlaf nach dem Mounten wĂŒrde dieses Zeug beenden lassen, bevor die Netns entfernt werden.
Aber das ist nur eine Hypothese
Ich habe es ohne Unmount versucht, der gleiche Unterschied. Es ist das Löschen des Netzwerk-Namespace. Diese 9 und das Entfernen des Mount-Namespaces lösen das Unmounten trotzdem aus.
Ah okay
Ăbrigens habe ich das Problem versehentlich (wĂ€hrend der Entwicklung) auf einem anderen Computer mit smb wieder reproduziert. Es ist ein Ubuntu 16.04 PC, Linux 4.4.0-77-generic. Und es gibt eine hĂ€ngende Task-RĂŒckverfolgung, die interessant sein könnte. Kein Absturz und gleiche ~4 Minuten Verzögerung.
[6409720.564230] device vethff6396b entered promiscuous mode
[6409720.564415] IPv6: ADDRCONF(NETDEV_UP): vethff6396b: link is not ready
[6409723.844595] unregister_netdevice: waiting for lo to become free. Usage count = 1
[6409726.812872] INFO: task exe:17732 blocked for more than 120 seconds.
[6409726.812918] Tainted: P O 4.4.0-77-generic #98-Ubuntu
[6409726.812959] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[6409726.813007] exe D ffff8809952bbcb8 0 17732 1 0x00000000
[6409726.813013] ffff8809952bbcb8 ffffffff821d9a20 ffff88103856c600 ffff880ffae2d400
[6409726.813018] ffff8809952bc000 ffffffff81ef7724 ffff880ffae2d400 00000000ffffffff
[6409726.813021] ffffffff81ef7728 ffff8809952bbcd0 ffffffff81837845 ffffffff81ef7720
[6409726.813025] Call Trace:
[6409726.813036] [<ffffffff81837845>] schedule+0x35/0x80
[6409726.813040] [<ffffffff81837aee>] schedule_preempt_disabled+0xe/0x10
[6409726.813044] [<ffffffff81839729>] __mutex_lock_slowpath+0xb9/0x130
[6409726.813048] [<ffffffff818397bf>] mutex_lock+0x1f/0x30
[6409726.813053] [<ffffffff81726a2e>] copy_net_ns+0x6e/0x120
[6409726.813059] [<ffffffff810a168b>] create_new_namespaces+0x11b/0x1d0
[6409726.813062] [<ffffffff810a17ad>] copy_namespaces+0x6d/0xa0
[6409726.813068] [<ffffffff8107f1d5>] copy_process+0x905/0x1b70
[6409726.813073] [<ffffffff810805d0>] _do_fork+0x80/0x360
[6409726.813077] [<ffffffff81080959>] SyS_clone+0x19/0x20
[6409726.813081] [<ffffffff8183b972>] entry_SYSCALL_64_fastpath+0x16/0x71
[6409733.941041] unregister_netdevice: waiting for lo to become free. Usage count = 1
[6409744.021494] unregister_netdevice: waiting for lo to become free. Usage count = 1
Der netdev@vger- Thread ist hier https://www.mail-archive.com/[email protected]/msg179703.html wenn jemand den Fortschritt verfolgen möchte.
@piec ja, das wird erwartet.
Ich bin auch auf diesen Fehler gestoĂen und konnte Oopses mit der docker-samba-loop-Methode von @piec auf den Ubuntu-Kernel-Images
Ich habe meine Ergebnisse dem Ubuntu-Fehlerbericht hinzugefĂŒgt: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1711407 und https://github.com/fho/docker-samba-loop
@fho danke. Sie benötigen eigentlich ĂŒberhaupt keinen Docker zum Repro, nur das AusfĂŒhren des Samba-Clients in einem Netzwerk-Namespace genĂŒgt gemÀà https://github.com/moby/moby/issues/5618#issuecomment -318681443
@rn danke fĂŒr die Info. So habe ich es noch nicht probiert.
Die letzten Posts hier und auf der netdev-Mailingliste scheinen sich nur um Kernel-Stalls zu drehen.
Ich habe auch Kernel-AbstĂŒrze mit Kernel 4.11 und 4.12.
Ich sehe ein Problem, das diesem sehr Ă€hnlich ist (wie in #35068 beschrieben). Wir betreiben im Grunde einen Schwarm mit zwei Knoten, der einen einzelnen Dienst mit 4 Replikaten unter Verwendung einer Spread-Placement-Strategie ausfĂŒhrt.
In jedem dieser Service-Container mounten wir den Host docker.sock als Volume, und innerhalb des Containers fĂŒhren wir docker run
Befehle mit einer maximalen ParallelitĂ€t von 4 pro Container aus. Dies fĂŒhrt dazu, dass bis zu 4 Container gleichzeitig erstellt und anschlieĂend ĂŒber -rm
sofort entfernt werden.
ZusÀtzliche Kernel-Logs und Beispiele zu ARMv7 in der obigen Referenz.
ip6_route_dev_notify Panik ist fĂŒr uns ein ernstes Problem.
Ich denke, wenn man sich das etwas genauer ansieht, ist dies definitiv NICHT der gleiche Fehler wie:
Ich denke, dies ist ein Problem im Upstream im Kernel mit der IPv6-Schicht.
Diese Informationen können relevant sein.
Wir können das Problem mit _unregister_netdevice reproduzieren: warten, bis lo frei wird. NutzungszĂ€hler = 1_ mit 4.14.0-rc3-Kernel mit _CONFIG_PREEMPT_NONE=y_ und nur auf einer CPU mit folgenden Boot-Kernel-Optionen ausgefĂŒhrt:
BOOT_IMAGE=/boot/vmlinuz-4.14.0-rc3 root=/dev/mapper/vg0-root ro quiet vsyscall=nosmp emulieren
Sobald wir diesen Zustand erreichen, bleibt er in diesem Zustand und ein Neustart ist erforderlich. Es können keine Container mehr gespawnt werden. Wir reproduzieren es, indem wir Bilder ausfĂŒhren, die ipsec/openvpn-Verbindungen herstellen + eine kleine Datei in den Tunneln herunterladen. Dann existieren die Instanzen (normalerweise laufen sie < 10s). Wir lassen 10 solcher Container pro Minute auf einer Maschine laufen. Mit den oben genannten Einstellungen (nur 1cpu) schafft es die Maschine in ~2 Stunden.
Ein anderer Reproduzierer mit dem gleichen Kernel, aber ohne Begrenzung der Anzahl der CPUs, soll iperf einfach 3 Sekunden im UDP-Modus innerhalb des Containers laufen lassen (es gibt also ĂŒberhaupt keine TCP-Kommunikation). Wenn wir 10 solcher Container parallel ausfĂŒhren, warten, bis alle fertig sind, und es erneut tun, haben wir das Problem in weniger als 10 Minuten (auf einer Maschine mit 40 Kernen).
In unseren beiden Reproduzierern haben wir "ip route flush table all; ifconfig
Hi,
Nur um das Feuer noch zu verstÀrken, sehen wir auch dieses Problem, wie hier angefordert...
Kernel-Version: Linux exe-v3-worker 4.9.0-3-amd64 #1 SMP Debian 4.9.30-2+deb9u5 (2017-09-19) x86_64 GNU/Linux
Linux-Distribution/Version: Debian 9.1 (mit allen aktuellen Paketen)
Verwenden Sie die neueste Kernel-Version Ihres Linux-Anbieters? Jawohl
Netzwerk-Setup (Bridge, Overlay, IPv4, IPv6 usw.): Nur IPv4, NATed als Standard-Docker-Setup
Beschreibung der Arbeitslast (welche Art von Containern, welche Art von Netzwerklast usw.): Sehr kurzlebige Container (von wenigen Sekunden bis zu einigen Minuten), die Skripte ausfĂŒhren, bevor sie beendet werden.
Und idealerweise eine einfache Reproduktion:
**kernel:[617624.412100] unregister_netdevice: wartet darauf, dass lo frei wird. Nutzungsanzahl = 1
Konnte alte Container nicht beenden oder neue auf den betroffenen Knoten starten, musste neu gestartet werden, um die FunktionalitÀt wiederherzustellen.**
Hoffentlich finden wir bald eine Ursache/einen Patch.
Mit freundlichen GrĂŒĂen,
robputt796
@campbellr
stimmte zu, dass es etwas mit Netzwerkspeicher zu tun zu haben scheint. Ich verwende ceph krbd als persistentes Volume in Kubernetes.
Und ich kann die Situation nach einem lang andauernden Container-Absturz reproduzieren.
Das Problem wurde vor 10 Tagen zugewiesen und ist in Arbeit. Weitere Informationen zu den VorgÀngen finden Sie hier https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1711407
Hoffentlich findet Dan Streetman heraus, wie man das Problem beheben kann
Es stellt sich heraus, dass das Oops durch einen Kernel-Fehler verursacht wird, der durch den Commit 76da0704507bbc51875013f6557877ab308cfd0a behoben wurde:
ipv6: ip6_route_dev_notify() nur einmal fĂŒr NETDEV_UNREGISTER aufrufen
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=76da0704507bbc51875013f6557877ab308cfd0a
(Es behebt lediglich die Kernel-Panik, nicht das Problem "kernel:unregister_netdevice: wait for lo to be free. Usage count = 2".)
(hier noch einmal wiederholen, da GitHub alte Kommentare versteckt)
Das hier diskutierte Problem ist ein Kernel-Bug und wurde noch nicht vollstĂ€ndig behoben. Einige Patches wurden in den Kernel eingefĂŒgt, die _einige_ Vorkommen dieses Problems beheben, aber andere sind noch nicht behoben.
Es gibt eine Reihe von Optionen, die fĂŒr _manche_ Situationen hilfreich sein können, aber nicht fĂŒr alle (wiederum; höchstwahrscheinlich handelt es sich um eine Kombination von Problemen, die denselben Fehler auslösen).
"Ich habe das auch" hilft nicht, den Fehler zu beheben. Hinterlassen Sie nur einen Kommentar, wenn Sie Informationen haben, die zur Lösung des Problems beitragen können (in diesem Fall ist die Bereitstellung eines Patches fĂŒr den Kernel-Upstream möglicherweise der beste Schritt).
Wenn Sie wissen möchten, dass Sie auch dieses Problem haben , verwenden Sie
Jeder Kommentar hier sendet eine E-Mail / Benachrichtigung an ĂŒber 3000 Personen. Ich möchte die Konversation zu diesem Thema nicht abschlieĂen, da es noch nicht gelöst ist, aber möglicherweise gezwungen wird, wenn Sie dies ignorieren.
Ich werde Kommentare entfernen, die keine nĂŒtzlichen Informationen hinzufĂŒgen, um den Thread (etwas) zu kĂŒrzen
Vielen Dank!
Ich glaube, ich habe dieses Problem behoben, zumindest wenn es durch eine Kernel-TCP-Socket-Verbindung verursacht wurde. Test-Kernel fĂŒr Ubuntu sind verfĂŒgbar und ich wĂŒrde mich ĂŒber Feedback freuen, wenn sie dies fĂŒr jeden hier helfen / beheben. Patch wird stromaufwĂ€rts ĂŒbermittelt; Weitere Details sind im LP-Bug:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1711407/comments/46
Es tut uns leid, die Feier zu verderben, aber wir konnten das Problem reproduzieren. Wir arbeiten jetzt mit @ddstreet daran unter https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1711407/ .
Gibt es keine Problemumgehungen?
Verwenden Sie Hostnetzwerke (was einen GroĂteil des Wertes von Containern zerstört, aber los geht's).
@pumba-lt Wir hatten dieses Problem vor etwa 1,5 Jahren, vor etwa einem Jahr habe ich IPv6 auf Kernel-Ebene (nicht sysctl) deaktiviert und hatte das Problem nicht einmal. AusfĂŒhren eines Clusters von 48 Blades.
Normalerweise in: /etc/default/grub
GRUB_CMDLINE_LINUX="xxxxx ipv6.disable=1"
Ich verwende jedoch PXE-Boot, daher hat meine PXE-Konfiguration:
DEFAULT menu.c32
prompt 0
timeout 50
MENU TITLE PXE Boot
label coreos
menu label CoreOS
kernel mykernel
append initrd=myimage ipv6.disable=1 elevator=deadline cloud-config-url=myurl
Ich versichere Ihnen, Sie werden dieses Problem nicht mehr sehen.
Bitte haben Sie VerstĂ€ndnis dafĂŒr, dass dies ein hĂ€ufiges SYMPTOM ist, das viele Ursachen hat. Was fĂŒr Sie funktioniert hat, um dies zu vermeiden, funktioniert möglicherweise nicht fĂŒr jemand anderen.
Ich kann bestÀtigen, dass unsere Probleme behoben wurden, nachdem IPv6 beim Booten deaktiviert wurde (aus der Konfigurationsdatei von Grub). Hatte zahlreiche Probleme in einem 7-Knoten-Cluster, lÀuft jetzt reibungslos.
Ich weià nicht mehr, wo ich die Lösung gefunden habe, oder habe ich sie trotzdem selbst gefunden, danke @qrpike , dass hast :) !!
https://cdn.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.4.114
begehen edaafa805e0f9d09560a4892790b8e19cab8bf09
Autor: Dan Streetman [email protected]
Datum: Do 18. Jan. 16:14:26 2018 -0500
net: tcp: close sock if net namespace is exiting
[ Upstream commit 4ee806d51176ba7b8ff1efd81f271d7252e03a1d ]
When a tcp socket is closed, if it detects that its net namespace is
exiting, close immediately and do not wait for FIN sequence.
For normal sockets, a reference is taken to their net namespace, so it will
never exit while the socket is open. However, kernel sockets do not take a
reference to their net namespace, so it may begin exiting while the kernel
socket is still open. In this case if the kernel socket is a tcp socket,
it will stay open trying to complete its close sequence. The sock's dst(s)
hold a reference to their interface, which are all transferred to the
namespace's loopback interface when the real interfaces are taken down.
When the namespace tries to take down its loopback interface, it hangs
waiting for all references to the loopback interface to release, which
results in messages like:
unregister_netdevice: waiting for lo to become free. Usage count = 1
These messages continue until the socket finally times out and closes.
Since the net namespace cleanup holds the net_mutex while calling its
registered pernet callbacks, any new net namespace initialization is
blocked until the current net namespace finishes exiting.
After this change, the tcp socket notices the exiting net namespace, and
closes immediately, releasing its dst(s) and their reference to the
loopback interface, which lets the net namespace continue exiting.
Link: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1711407
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=97811
Signed-off-by: Dan Streetman <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
Die Verwendung von SCTP in netns könnte dies ebenfalls auslösen, Korrekturen in 4.16-rc1:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4a31a6b19f9ddf498c81f5c9b089742b7472a6f8
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=957d761cf91cdbb175ad7d8f5472336a4d54dbf2
immer noch passiert "unregister_netdevice: Warten auf eth0 wird frei. Usage count = 1" obwohl ich die Kernel-Version auf 4.4.118 und Docker-Version 17.09.1-ce aktualisiert habe ïŒvielleicht sollte ich versuchen, IPv6 auf Kernel-Ebene zu deaktivieren. Hoffe, es Cloud-Arbeit.
@wuming5569 Bitte lassen Sie mich wissen, ob es mit dieser Linux-Version fĂŒr Sie funktioniert hat
@wuming5569 Vielleicht aktualisieren Sie den Kernel 4.4.114, beheben Sie "unregister_netdevice: Warten, bis lo frei wird. NutzungszĂ€hler = 1", nicht fĂŒr "unregister_netdevice: Warten, bis eth0 frei wird. NutzungszĂ€hler = 1".
Ich habe in der Produktion getestet.
@ddstreet Dies ist ein Feedback, irgendeine Hilfe?
@wuming5569 Wie oben erwĂ€hnt, sind die Nachrichten selbst gutartig, können jedoch schlieĂlich dazu fĂŒhren, dass der Kernel hĂ€ngt. HĂ€ngt Ihr Kernel und wenn ja, wie sieht Ihr Netzwerkmuster aus, dh welche Art von Netzwerk betreiben Ihre Container?
Hatte das gleiche Problem auf CentOS. Mein Kernel ist 3.10.0-693.17.1.el7.x86_64. Aber ich habe in Syslog keinen Àhnlichen Stack-Trace erhalten.
Gleiches auf Centos7-Kernel 3.10.0-514.21.1.el7.x86_64 und Docker 18.03.0-ce
@danielefranceschi Ich empfehle Ihnen, auf den neuesten CentOS-Kernel (mindestens 3.10.0-693) zu aktualisieren. Es wird das Problem nicht lösen, aber es scheint viel seltener zu sein. In den Kerneln 3.10.0-327 und 3.10.0-514 haben wir den Stack-Trace gesehen, aber meiner Erinnerung nach haben wir in 3.10.0-693 keinen davon gesehen.
@alexhexabeam 3.10.0-693 scheint einwandfrei zu funktionieren, tnx :)
Gleiches auf CentOS7-Kernel 4.16.0-1.el7.elrepo.x86_64 und Docker 18.03.0-ce
Es funktionierte wochenlang vor dem Absturz und als es versucht wurde, hochzufahren, blieb es vollstÀndig hÀngen.
Das Problem trat auch mit Kernel 3.10.0-693.21.1.el7 auf
Ich kann bestÀtigen, dass es auch passiert auf:
Linux 3.10.0-693.17.1.el7.x86_64
Red Hat Enterprise Linux Server-Version 7.4 (Maipo)
Ich kann es reproduzieren, indem ich "Service Docker-Neustart" durchfĂŒhre, wĂ€hrend ich eine bestimmte Last habe.
@wuming5569 Haben Sie dieses Problem behoben? Was ist Ihr Netzwerktyp? wir sind seit Wochen von diesem Problem verwirrt.
Haben Sie ein Wechat-Konto?
4admin2root, angesichts des von Ihnen erwÀhnten Fixes https://cdn.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.4.114 ,
Ist es sicher, den Userland-Proxy fĂŒr den Docker-Daemon zu deaktivieren, wenn der richtige aktuelle Kernel installiert ist? Es ist nicht ganz klar, ob es von
https://github.com/moby/moby/issues/8356
https://github.com/moby/moby/issues/11185
Da beide Àlter sind als der Kernel-Fix
Dankeschön
wir sind seit Wochen von diesem Problem verwirrt.
Linux 3.10.0-693.17.1.el7.x86_64
CentOS Linux-Version 7.4.1708 (Kern)
Kann jemand bestÀtigen, ob der neueste 4.14-Kernel dieses Problem hat? Scheint nicht so zu sein. Niemand im Internet hatte dieses Problem mit dem 4.14-Kernel.
Ich sehe dies im Kernel 4.15.15-1, Centos7
Wenn man sich die Ănderungsprotokolle ansieht, hat https://cdn.kernel.org/pub/linux/kernel/v4.x/ChangeLog-4.15.8 einen Fix fĂŒr SCTP, aber nicht fĂŒr TCP. Sie können also die neueste Version 4.14 ausprobieren.
wir haben jetzt auf 4.16.13 aktualisiert. Beobachten. Dieser Fehler traf uns nur ungefÀhr einmal pro Woche auf einem Knoten.
Haben Sie IPv6 in Grub-Boot-Parametern oder sysctl deaktiviert? Nur Bootparameter funktionieren. Sysctl wird es nicht beheben.
Am 4. Juni 2018 um 12:09:53 schrieb Sergey Pronin ( [email protected] (mailto:[email protected])):
selbst 4.15.18 hilft nicht bei diesem Fehler
IPv6 deaktivieren hilft auch nichtwir haben jetzt auf 4.16.13 aktualisiert. Beobachten. Dieser Fehler traf uns nur ungefÀhr einmal pro Woche auf einem Knoten.
â
Sie erhalten dies, weil Sie erwÀhnt wurden.
Antworten Sie direkt auf diese E-Mail, zeigen Sie sie auf GitHub an (https://github.com/moby/moby/issues/5618#issuecomment-394410321) oder schalten Sie den Thread stumm (https://github.com/notifications/unsubscribe-auth /AAo3HLYI_jnwjgtQ0ce-E4mc6Em5yeISks5t5VvRgaJpZM4B4L4Z).
fĂŒr mich taucht der Fehler meistens auf, nachdem das gleiche Projekt/Netzwerk erneut bereitgestellt wurde
@qrpike du hast recht, wir haben es nur mit sysctl versucht. Lass es mich mit Grub versuchen. Vielen Dank!
4.9.88 Debian-Kernel. Reproduzierbar.
@qrpike du hast recht, wir haben es nur mit sysctl versucht. Lass es mich mit Grub versuchen. Vielen Dank!
In meinem Fall hat das Deaktivieren von IPv6 keinen Unterschied gemacht.
@spronin-aurea Hat das Deaktivieren von IPv6 beim Bootloader geholfen?
@qrpike Können Sie uns etwas ĂŒber die von Ihnen verwendeten Knoten sagen, wenn die Deaktivierung von IPv6 in Ihrem Fall geholfen hat? Kernel-Version, k8s-Version, CNI, Docker-Version usw.
@komljen Ich habe CoreOS in den letzten 2 Jahren ohne einen einzigen Vorfall verwendet. Seit ~ver 1000. Ich habe es in letzter Zeit nicht ausprobiert, aber wenn ich IPv6 nicht deaktiviere, tritt der Fehler auf.
Auf meiner Seite verwende ich auch CoreOS, IPv6 mit Grub deaktiviert und das Problem tritt immer noch auf
@deimosfr Ich verwende derzeit PXE-Boot fĂŒr alle meine Knoten:
DEFAULT menu.c32
prompt 0
timeout 50
MENU TITLE PXE Boot Blade 1
label coreos
menu label CoreOS ( blade 1 )
kernel coreos/coreos_production_pxe.vmlinuz
append initrd=coreos/coreos_production_pxe_image.cpio.gz ipv6.disable=1 net.ifnames=1 biosdevname=0 elevator=deadline cloud-config-url=http://HOST_PRIV_IP:8888/coreos-cloud-config.yml?host=1 root=LABEL=ROOT rootflags=noatime,discard,rw,seclabel,nodiratime
Mein Hauptknoten, der der PXE-Host ist, ist jedoch auch CoreOS und bootet von der Festplatte und hat das Problem auch nicht.
Welche Kernel-Versionen laufen bei euch?
Die, bei denen ich das Problem bekam, waren auf 4.14.32-coreos und davor. Dieses Problem tritt bei 4.14.42-coreos noch nicht auf
Centos 7.5 mit 4.17.3-1-Kernel hat das Problem immer noch.
Umgebung:
Kubernetes 1.10.4
Docker 13.1
mit Flanell-Netzwerk-Plugin.
Protokoll :
[ 89.790907] IPv6: ADDRCONF(NETDEV_UP): eth0: Link ist nicht bereit
[ 89.798523] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: Link wird bereit
[ 89.799623] cni0: Port 8(vethb8a93c6f) trat in den Sperrzustand ein
[ 89.800547] cni0: Port 8(vethb8a93c6f) ist in den deaktivierten Zustand ĂŒbergegangen
[ 89.801471] GerÀt vethb8a93c6f wechselte in den Promiscuous-Modus
[ 89.802323] cni0: Port 8(vethb8a93c6f) ist in den Sperrzustand eingetreten
[ 89.803200] cni0: Port 8(vethb8a93c6f) hat den Weiterleitungsstatus erreicht
kernel:unregister_netdevice : Warten, bis lo frei wird. NutzungszĂ€hler = 1ă
Jetzt :
Die Knoten-IP kann Netzwerkdienste wie ssh erreichen, aber nicht verwenden.
Die Symptome hier Ă€hneln vielen Berichten an verschiedenen anderen Stellen. Alles was mit Netzwerk-Namespaces zu tun hat. Könnten die Leute, die darauf stoĂen, bitte sehen, ob unshare -n
hÀngt, und wenn ja, von einem anderen Terminal aus cat /proc/$pid/stack
des Unshare-Prozesses durchfĂŒhren, um zu sehen, ob es in copy_net_ns()
hĂ€ngt? Dies scheint ein gemeinsamer Nenner fĂŒr viele der Probleme zu sein, einschlieĂlich einiger hier gefundener RĂŒckverfolgungen. Zwischen 4.16 und 4.18 gab es eine Reihe von Patches von Kirill Tkhai, die das betroffene Locking stark ĂŒberarbeitet haben. Die betroffenen Distributions-/Kernel-Paketbetreuer sollten wahrscheinlich versuchen, sie auf stabile Kernel anzuwenden/zurĂŒckportieren und sehen, ob das hilft.
Siehe auch: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1779678
@Blub
sudo cat /proc/122355/stack
[<ffffffff8157f6e2>] copy_net_ns+0xa2/0x180
[<ffffffff810b7519>] create_new_namespaces+0xf9/0x180
[<ffffffff810b775a>] unshare_nsproxy_namespaces+0x5a/0xc0
[<ffffffff81088983>] SyS_unshare+0x193/0x300
[<ffffffff816b8c6b>] tracesys+0x97/0xbd
[<ffffffffffffffff>] 0xffffffffffffffff
Angesichts der Locking-Ănderungen in 4.18 wĂ€re es gut, die aktuelle 4.18rc zu testen, vor allem, wenn Sie sie mehr oder weniger zuverlĂ€ssig auslösen können, da meiner Meinung nach viele Leute das Ăndern von Kernel-Versionen auch die Wahrscheinlichkeit dafĂŒr verĂ€ndert haben viel.
Ich hatte dieses Problem mit Kubernetes und nach dem Wechsel auf die neueste stabile CoreOS-Version - 1745.7.0 ist das Problem behoben:
gleiches Problem bei CentOS 7
@Blub Sehe das gleiche auf CoreOS 1688.5.3, Kernel 4.14.32
ip-10-72-101-86 core # cat /proc/59515/stack
[<ffffffff9a4df14e>] copy_net_ns+0xae/0x200
[<ffffffff9a09519c>] create_new_namespaces+0x11c/0x1b0
[<ffffffff9a0953a9>] unshare_nsproxy_namespaces+0x59/0xb0
[<ffffffff9a07418d>] SyS_unshare+0x1ed/0x3b0
[<ffffffff9a003977>] do_syscall_64+0x67/0x120
[<ffffffff9a800081>] entry_SYSCALL_64_after_hwframe+0x3d/0xa2
[<ffffffffffffffff>] 0xffffffffffffffff
Theoretisch kann es irgendwo einen oder mehrere andere Traces geben, die eine der Funktionen von net_namespace.c enthalten, die net_mutex
( cleanup_net
, net_ns_barrier
, net_ns_init
, {,un}register_pernet_{subsys,device}
). FĂŒr stabile Kernel wĂ€re es natĂŒrlich viel einfacher, wenn es eine bestimmte Sache gĂ€be, die sich beheben lieĂe, als alle Locking-Ănderungen von 4.18 zurĂŒck zu portieren. Aber bisher habe ich keine Spur gesehen, die zur Ursache fĂŒhrt. Ich weiĂ nicht, ob es hilft, aber vielleicht sind andere /proc/*/stack
s mit den oben genannten Funktionen sichtbar, wenn das Problem auftritt?
gleicher Fehler ! und mein env ist debian 8
RHEL, SCHWARM, 18.03.0-ce
Manuelles Starten eines Containers auf einem Managerknoten:
sudo docker run -it -v /import:/temp/eximport -v /home/myUser:/temp/exhome docker.repo.myHost/ fedora:23 /bin/bash
Nach einiger Zeit nichts tun:
[ root@8a9857c25919 myDir]#
Nachricht von syslogd@se1-shub-t002 am 19. Juli 11:56:03 ...
kernel:unregister_netdevice : Warten, bis lo frei wird. Nutzungsanzahl = 1
Nach Minuten bin ich wieder auf der Konsole des Managerknotens und der gestartete Container lÀuft nicht mehr.
Beschreibt dies das gleiche Problem oder ist dies eine andere "Problemsuite"?
THX im Voraus!
AKTUALISIEREN
Dies geschieht auch direkt auf der ssh-Konsole (auf der Swarmmanager-Bash).
AKTUALISIEREN
Host-Rechner (ein Manager-Knoten im Schwarm):
Linux [MACHINENNAME] 3.10.0-514.2.2.el7.x86_64 #1 SMP Mi 16. Nov 13:15:13 EST 2016 x86_64 x86_64 x86_64 GNU/Linux
Wenn dies nach einiger Zeit nicht behoben wird, ist dies ein anderes Problem.
Gleiches auf CentOS7.5 Kernel 3.10.0-693.el7.x86_64 und Docker 1.13.1
Das gleiche Problem OEL 7,5
uname -a
4.1.12-124.16.1.el7uek.x86_64 #2 SMP Mo 11. Juni 20:09:51 PDT 2018 x86_64 x86_64 x86_64 GNU/Linux
Docker-Infos
BehÀlter: 9
Laufen: 5
Angehalten: 0
Gestoppt: 4
Bilder: 6
Serverversion: 17.06.2-ol
dmesg
[2238374.718889] unregister_netdevice: Warten darauf, dass lo frei wird. Nutzungsanzahl = 1
[2238384.762813] unregister_netdevice: Warten darauf, dass lo frei wird. Nutzungsanzahl = 1
[2238392.792585] eth0: umbenannt von vethbed6d59
(diese https://github.com/moby/moby/issues/5618#issuecomment-351942943 hier noch einmal wiederholen, da GitHub alte Kommentare versteckt)
Das hier diskutierte Problem ist ein Kernel-Bug und wurde noch nicht vollstĂ€ndig behoben. Einige Patches wurden in den Kernel eingefĂŒgt, die _einige_ Vorkommen dieses Problems beheben, aber andere sind noch nicht behoben.
Es gibt eine Reihe von Optionen, die fĂŒr _manche_ Situationen hilfreich sein können, aber nicht fĂŒr alle (wiederum; höchstwahrscheinlich handelt es sich um eine Kombination von Problemen, die denselben Fehler auslösen).
Wenn der Kernel _nach_ abstĂŒrzt, ist das ein Fehler (siehe unten)
"Ich habe das auch" hilft nicht, den Fehler zu beheben. Hinterlassen Sie nur einen Kommentar, wenn Sie Informationen haben, die zur Lösung des Problems beitragen können (in diesem Fall ist die Bereitstellung eines Patches fĂŒr den Kernel-Upstream möglicherweise der beste Schritt).
Wenn Sie wissen möchten, dass Sie auch dieses Problem haben , verwenden Sie
Jeder Kommentar hier sendet eine E-Mail / Benachrichtigung an ĂŒber 3000 Personen. Ich möchte die Konversation zu diesem Thema nicht abschlieĂen, da es noch nicht gelöst ist, aber möglicherweise gezwungen wird, wenn Sie dies ignorieren.
Ich werde Kommentare entfernen, die keine nĂŒtzlichen Informationen hinzufĂŒgen, um den Thread (etwas) zu kĂŒrzen
Um es klar zu sagen, die Nachricht selbst ist gutartig , es ist der Kernel-Absturz nach den vom OP gemeldeten Nachrichten, was nicht der Fall ist.
Der Kommentar im Code, aus dem diese Nachricht stammt, erklÀrt, was passiert. GrundsÀtzlich erhöht jeder Benutzer, z. B. der IP-Stack) eines NetzwerkgerÀts (z. B. das Ende eines
veth
Paares in einem Container) einen ReferenzzĂ€hler in der NetzwerkgerĂ€testruktur, wenn er das NetzwerkgerĂ€t verwendet. Wenn das GerĂ€t entfernt wird (z. B. wenn der Container entfernt wird), wird jeder Benutzer benachrichtigt, damit er einige Bereinigungen durchfĂŒhren kann (z. B. offene Sockets schlieĂen usw.), bevor der ReferenzzĂ€hler verringert wird. Da diese Bereinigung einige Zeit in Anspruch nehmen kann, insbesondere unter hoher Last (viele Schnittstellen, viele Verbindungen usw.), kann der Kernel die Nachricht hier und da ab und zu ausgeben .Wenn ein Benutzer eines NetzwerkgerĂ€ts den ReferenzzĂ€hler nie verringert, wird ein anderer Teil des Kernels feststellen, dass die Aufgabe, die auf die Bereinigung wartet, hĂ€ngen bleibt und abstĂŒrzt. Nur dieser Absturz weist auf einen Kernel-Bug hin (einige Benutzer haben ĂŒber einen Codepfad den ReferenzzĂ€hler nicht verringert). Es gab mehrere solcher Fehler und sie wurden im modernen Kernel behoben (und möglicherweise auf Ă€ltere zurĂŒckportiert). Ich habe einige Stresstests geschrieben (und schreibe sie weiter), um solche AbstĂŒrze auszulösen, konnte sie aber auf modernen Kerneln nicht reproduzieren (ich tue jedoch die obige Meldung).
* Bitte melden Sie dieses Problem nur, wenn Ihr Kernel tatsĂ€chlich abstĂŒrzt *, dann wĂ€ren wir sehr interessiert an:
- Kernel-Version (Ausgabe von
uname -r
)- Linux-Distribution/Version
- Verwenden Sie die neueste Kernel-Version Ihres Linux-Anbieters?
- Netzwerkeinrichtung (Bridge, Overlay, IPv4, IPv6 usw.)
- Beschreibung der Arbeitslast (welche Art von Containern, welche Art von Netzwerklast usw.)
- Und idealerweise eine einfache Reproduktion
Vielen Dank!
LĂ€uft Docker unter irgendwelchen Grenzen? Wie ulimits, cgroups etc...
neueres systemd hat ein Standardlimit, auch wenn Sie es nicht festgelegt haben. Ich habe die Dinge auf unbegrenzt eingestellt und das Problem ist seitdem nicht mehr aufgetreten (Seit 31 Tagen geschaut).
Ich hatte das gleiche Problem in vielen Umgebungen und meine Lösung war Firewall stoppen. Es ist vorerst nicht wieder passiert
Rhel 7.5 - 3.10.0-862.3.2.el7.x86_64
Docker 1.13
@dElogics Welche Version von systemd gilt als "neuer"? Ist dieses Standardlimit in CentOS 7.5 systemd aktiviert?
Und wenn Sie fragen, ob wir Docker unter irgendwelchen Limits ausfĂŒhren, meinen Sie damit den Docker-Daemon oder die einzelnen Container?
Der Docker-Daemon. Das systemd wie in Debian 9 (232-25).
Bei RHEL bin ich mir nicht sicher, aber ich habe dieses Problem auch persönlich bei RHEL gesehen. Ich wĂŒrde LimitNOFILE=1048576, LimitNPROC=unendlich, LimitCORE=unendlich, TasksMax=unendlich setzen
Kernel: unregister_netdevice: Warten darauf, dass eth0 frei wird. Nutzungsanzahl = 3
Kernel 4.4.146-1.el7.elrepo.x86_64
Linux-Version CentOS Linux-Version 7.4.1708 (Kern)
BrĂŒckenmodus
Ich hatte das gleiche Problem, was kann ich tun?
Gleicher Fehler:
CentOS Linux-Version 7.5.1804 (Kern)
Docker-Version 18.06.1-ce, Build e68fc7a
Kernel-Version: 3.10.0-693.el7.x86_64
Das Àhnliche Problem, das ich hier kennengelernt habe...
Gibt es irgendwelche Bewegungen, die ich jetzt ausfĂŒhren könnte? Bitte hilf mir...
CentOS 7.0.1406
[ root@zjsm-slavexx etc]# uname -a
Linux zjsm-slave08 3.10.0-123.el7.x86_64 #1 SMP Mo 30. Juni 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
[ root@zjsm-slavexx etc]# cat /etc/centos-release
CentOS Linux-Version 7.0.1406 (Kern)
Docker-Informationen:
[ root@zjsm-slavexx ~]# Docker-Version
Klient:
Version: 17.04.0-ce
API-Version: 1.28
Go-Version: go1.7.5
Git-Commit: 4845c56
Gebaut: Mo 3. Apr 18:01:50 2017
Betriebssystem/Arch: linux/amd64
Server:
Version: 17.04.0-ce
API-Version: 1.28 (Mindestversion 1.12)
Go-Version: go1.7.5
Git-Commit: 4845c56
Gebaut: Mo 3. Apr 18:01:50 2017
Betriebssystem/Arch: linux/amd64
Experimentell: falsch
CentOS Linux Release 7.2.1511 Kernel: 3.10.0-327.el7.x86_64
gleiches Problem
Ich habe dieses Problem experimentiert.
Ubuntu 16.04.3 LTS
Kernel 4.4.0-87-generic #110-Ubuntu SMP Tue Jul 18 12:55:35 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Docker version:
Client:
Version: 17.09.0-ce
API version: 1.32
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:42:18 2017
OS/Arch: linux/amd64
Server:
Version: 17.09.0-ce
API version: 1.32 (minimum version 1.12)
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:40:56 2017
OS/Arch: linux/amd64
Experimental: false
@thaJeztah , vielleicht solltest du deinen Kommentar oben in den ursprĂŒnglichen Beitrag
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
b3fc47abfff2 bridge bridge local
f9474559ede8 dockerfile_cluster_net bridge local
ef999de68a96 host host local
e7b41d23674c none null local
$ docker network rm f9474559ede8
repariert.
@hzbd Du meinst das benutzerdefinierte Bridge-Netzwerk löschen? Haben Sie versucht, weiter zu graben, um herauszufinden, warum? Bitte lassen Sie es mich wissen, wenn Sie das getan haben. Ich schÀtze das sehr.
Warten darauf, behoben zu werden
LĂ€uft Docker unter irgendwelchen Grenzen? Wie ulimits, cgroups etc...
neueres systemd hat ein Standardlimit, auch wenn Sie es nicht festgelegt haben. Ich habe die Dinge auf unbegrenzt eingestellt und das Problem ist seitdem nicht mehr aufgetreten (Seit 31 Tagen geschaut).
Ok, dieser Fehler tritt immer noch auf, aber die Wahrscheinlichkeit hat sich verringert.
Ich denke, wenn die Container anmutig gestoppt werden (PID 1 exist()s), dann wird uns dieser Fehler nicht stören.
@dElogics danke fĂŒr die
@dElogics danke fĂŒr die
Sie mĂŒssen die systemd-Einheit von Docker Ă€ndern. Die von mir verwendete Systemd-Einheit (nur relevante Teile) --
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service flannel.service
Wants=network-online.target
Requires=docker.socket
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
Hatte jemand dieses Problem in einem Kernel 4.15 oder neuer?
Dieser Dan Streetman-Fix (https://github.com/torvalds/linux/commit/4ee806d51176ba7b8ff1efd81f271d7252e03a1d) ist erstmals in der Kernelversion 4.15 enthalten und es scheint, dass zumindest fĂŒr jemanden dies seit dem Upgrade auf 4.16 (https:// /github.com/kubernetes/kubernetes/issues/64743#issuecomment-436839647)
Hat es jemand ausprobiert?
@victorgp Wir haben immer noch das Problem mit dem 4.15-Kernel. Wir werden hier berichten, wenn wir mit Kernel 4.16 getestet haben (hoffentlich in ein paar Wochen).
Wir haben einige Monate lang die Kernel- Version 4.14.62 verwendet , dieses Problem ist verschwunden.
Um meine vorherigen VorsÀtze zu ergÀnzen -- ein anmutiges Stoppen von Containern (die auf SIGTERM reagieren) löst dies nie aus.
Versuchen Sie auch, die Container im Host-Namespace auszufĂŒhren (falls dies fĂŒr Sie akzeptabel ist), wodurch das Problem vollstĂ€ndig behoben wird.
@dElogics Was meinst du mit "Host-Namespace"? Ist es einfach --privileged
?
@dElogics Was meinst du mit "Host-Namespace"? Ist es einfach
--privileged
?
Nein, es bedeutet --network=host
Seit dem Upgrade von Kernel 4.4.0 auf 4.15.0 und Docker 1.11.2 auf 18.09 ist das Problem verschwunden.
In einer betrÀchtlichen Flotte von VMs, die als Docker-Hosts fungierten, trat dieses Problem mehrmals tÀglich auf (mit unserem Docker-Anwendungsfall).
45 Tage in und wir sehen das nicht mehr.
FĂŒr die Nachwelt kann ein Stack-Trace eines hĂ€ngenden Docker 1.11.2 mit printk's, der unregister_netdevice: waiting for vethXXXXX
anzeigt (Ă€hnlich dem, was wir immer in unserer Flotte in Hunderten von VMs sahen), unter http://paste . gefunden werden .ubuntu.com/p/6RgkpX352J/ (die interessante Container-Ref ist 0xc820001980
)
goroutine 8809 [syscall, 542 minutes, locked to thread]:
syscall.Syscall6(0x2c, 0xd, 0xc822f3d200, 0x20, 0x0, 0xc822f3d1d4, 0xc, 0x20, 0xc82435fda0, 0x10)
/usr/local/go/src/syscall/asm_linux_amd64.s:44 +0x5
syscall.sendto(0xd, 0xc822f3d200, 0x20, 0x20, 0x0, 0xc822f3d1d4, 0xc80000000c, 0x0, 0x0)
/usr/local/go/src/syscall/zsyscall_linux_amd64.go:1729 +0x8c
syscall.Sendto(0xd, 0xc822f3d200, 0x20, 0x20, 0x0, 0x7faba31bded8, 0xc822f3d1c8, 0x0, 0x0)
/usr/local/go/src/syscall/syscall_unix.go:258 +0xaf
github.com/vishvananda/netlink/nl.(*NetlinkSocket).Send(0xc822f3d1c0, 0xc82435fda0, 0x0, 0x0)
/usr/src/docker/vendor/src/github.com/vishvananda/netlink/nl/nl_linux.go:333 +0xd4
github.com/vishvananda/netlink/nl.(*NetlinkRequest).Execute(0xc82435fda0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
/usr/src/docker/vendor/src/github.com/vishvananda/netlink/nl/nl_linux.go:215 +0x111
github.com/vishvananda/netlink.LinkDel(0x7fab9c2b15d8, 0xc825ef2240, 0x0, 0x0)
/usr/src/docker/vendor/src/github.com/vishvananda/netlink/link_linux.go:615 +0x16b
github.com/docker/libnetwork/drivers/bridge.(*driver).DeleteEndpoint(0xc8204aac30, 0xc8203ae780, 0x40, 0xc826e7b800, 0x40, 0x0, 0x0)
/usr/src/docker/vendor/src/github.com/docker/libnetwork/drivers/bridge/bridge.go:1060 +0x5cf
github.com/docker/libnetwork.(*endpoint).deleteEndpoint(0xc822945b00, 0xc82001ac00, 0x0, 0x0)
/usr/src/docker/vendor/src/github.com/docker/libnetwork/endpoint.go:760 +0x261
github.com/docker/libnetwork.(*endpoint).Delete(0xc822945b00, 0x7fab9c2b0a00, 0x0, 0x0)
/usr/src/docker/vendor/src/github.com/docker/libnetwork/endpoint.go:735 +0xbcb
github.com/docker/libnetwork.(*sandbox).delete(0xc8226bc780, 0xc8229f0600, 0x0, 0x0)
/usr/src/docker/vendor/src/github.com/docker/libnetwork/sandbox.go:217 +0xd3f
github.com/docker/libnetwork.(*sandbox).Delete(0xc8226bc780, 0x0, 0x0)
/usr/src/docker/vendor/src/github.com/docker/libnetwork/sandbox.go:175 +0x32
github.com/docker/docker/daemon.(*Daemon).releaseNetwork(0xc820001980, 0xc820e23a40)
/usr/src/docker/.gopath/src/github.com/docker/docker/daemon/container_operations.go:732 +0x4f1
github.com/docker/docker/daemon.(*Daemon).Cleanup(0xc820001980, 0xc820e23a40)
/usr/src/docker/.gopath/src/github.com/docker/docker/daemon/start.go:163 +0x62
github.com/docker/docker/daemon.(*Daemon).StateChanged(0xc820001980, 0xc825f9fac0, 0x40, 0xc824155b50, 0x4, 0x8900000000, 0x0, 0x0, 0x0, 0x0, ...)
/usr/src/docker/.gopath/src/github.com/docker/docker/daemon/monitor.go:39 +0x60a
github.com/docker/docker/libcontainerd.(*container).handleEvent.func2()
/usr/src/docker/.gopath/src/github.com/docker/docker/libcontainerd/container_linux.go:177 +0xa5
github.com/docker/docker/libcontainerd.(*queue).append.func1(0xc820073c01, 0xc820f9a2a0, 0xc821f3de20, 0xc822ddf9e0)
/usr/src/docker/.gopath/src/github.com/docker/docker/libcontainerd/queue_linux.go:26 +0x47
created by github.com/docker/docker/libcontainerd.(*queue).append
/usr/src/docker/.gopath/src/github.com/docker/docker/libcontainerd/queue_linux.go:28 +0x1da
Daraus können wir sehen, dass es in https://github.com/moby/moby/blob/v1.11.2/daemon/container_operations.go#L732 gehangen hat
was uns auf https://github.com/moby/moby/blob/v1.11.2/vendor/src/github.com/docker/libnetwork/sandbox.go#L175 verweist
Und
https://github.com/moby/moby/blob/v1.11.2/vendor/src/github.com/docker/libnetwork/endpoint.go#L760
Welches geht in den libnetwork Bridge-Treiber (ĂŒberprĂŒfe die tolle Beschreibung)
https://github.com/moby/moby/blob/v1.11.2/vendor/src/github.com/docker/libnetwork/drivers/bridge/bridge.go#L1057 -L1061
Wechsel zu netlink
https://github.com/moby/moby/blob/v1.11.2/vendor/src/github.com/vishvananda/netlink/link_linux.go#L601 -L617
https://github.com/moby/moby/blob/v1.11.2//vendor/src/github.com/vishvananda/netlink/nl/nl_linux.go#L215
Und schlieĂlich in diesem Netlink-Socket, ruft https://github.com/moby/moby/blob/v1.11.2/vendor/src/github.com/vishvananda/netlink/nl/nl_linux.go#L333 auf
Wir glauben, dass der Fehler im Allgemeinen beim Stoppen eines Containers auftritt und da SKBs immer noch in den netns referenziert werden, wird das veth nicht freigegeben. Docker gibt dann nach 15s einen Kill an diesen Container aus. Der Docker-Daemon geht mit dieser Situation nicht elegant um, aber letztendlich liegt der Fehler im Kernel. Wir glauben, dass https://github.com/torvalds/linux/commit/4ee806d51176ba7b8ff1efd81f271d7252e03a1d (akzeptiert in 4.15 Upstream) und damit verbundene Commits (es gibt mehrere) als Minderung dienen.
Im Allgemeinen ist dieser Teil des Kernels kein schöner Ort.
Was es wert ist ... wir haben den RHEL-Linux-Kernel von 3.10.0 auf 4.17.11 aktualisiert. (Kubernetes-Cluster wird ausgefĂŒhrt). Vor dem Upgrade trat dieser Fehler mehrmals tĂ€glich auf verschiedenen Servern auf. LĂ€uft jetzt seit drei Wochen mit dem Upgrade. Fehler trat nur einmal auf. Also grob gesagt um 99% reduziert.
@marckamerbeek Sie haben den RHEL-Kernel zu einem Community-Kernel aktualisiert? Dann wird es nicht mehr unterstĂŒtzt.
@Beatlor CentOS-Benutzer können dies tun.
centos 7.2 hat immer noch dieses Problem: kernel:unregister_netdevice : Warten darauf, dass lo frei wird. Nutzungsanzahl = 1
@Beatlor RHEL hat uns ĂŒberhaupt nicht geholfen. Eine stabile Produktionsumgebung ist wichtiger als ein wertloser Supportvertrag. Wir laufen jetzt noch sehr stabil am 4.17.11. Keine groĂen Probleme mehr.
@Beatlor RHEL hat uns ĂŒberhaupt nicht geholfen. Eine stabile Produktionsumgebung ist wichtiger als ein wertloser Supportvertrag. Wir laufen jetzt noch sehr stabil am 4.17.11. Keine groĂen Probleme mehr.
Ja, dieses Problem hatte ich auch nicht, nachdem ich den Kernel auf 4.17.0-1.el7.elrepo.x86_64 aktualisiert hatte. Ich habe dies schon einmal versucht (4.4.x, 4.8, 4.14..) und es ist fehlgeschlagen. Es scheint, dass das Problem im 4.17+-Kernel nicht mehr auftritt.
centos 7.2 hat immer noch dieses Problem: kernel:unregister_netdevice : Warten darauf, dass lo frei wird. Nutzungsanzahl = 1
Sie können versuchen, auf den neuesten 4.19+ Kernel zu aktualisieren.
Warten Sie einfach ein paar Monate und jemand wird sich auch ĂŒber den 4.19-Kernel beschweren. Nur die Geschichte wiederholt sich.
Hallo zusammen, gute Nachrichten!
Seit meinem letzten Kommentar hier (zum Zeitpunkt des Schreibens vor 17 Tagen) habe ich diese Fehler nicht mehr bekommen. Auf meinen Servern (ungefÀhr 30) liefen Ubuntu 14.04 mit einigen veralteten Paketen.
Nach einem kompletten System-Upgrade inklusive Docker-Engine (von 1.7.1 auf 1.8.3) + Kernel-Upgrade auf die neuste mögliche Version im Repo von Ubuntu laufen meine Server ohne Vorkommnisse.
đ±
Welche Kernel-Version rĂŒstest du auf?
vielleicht verwandt damit https://github.com/torvalds/linux/commit/f186ce61bb8235d80068c390dc2aad7ca427a4c2
Hier ist ein Versuch, dieses Problem anhand der Kommentare zu diesem Problem zusammenzufassen: https://github.com/kubernetes/kubernetes/issues/70427 , https://github.com/kubernetes/kubernetes/issues/64743 und https: //access.redhat.com/solutions/3659011
Ich fordere https://github.com/kubernetes/kubernetes/issues/70427#issuecomment -470681000 heraus, da wir dies mit Tausenden von VMs in 4.15.0 nicht gesehen haben, wĂ€hrend wir es am 4.4. 0, gibt es mehr Berichte darĂŒber in 4.15.0?
Ich sehe dieses Problem bei einem meiner Computer, auf dem Docker unter Debian 9 Stretch ( 4.9.0-8-amd64
) ausgefĂŒhrt wird. Ich habe dieses Problem mit einem Tunnel, der ĂŒber Docker Gen im Docker-Container erstellt wurde und eine Kernel-Panik generiert:
Message from syslogd<strong i="7">@xxxx</strong> at Apr 29 15:55:41 ...
kernel:[719739.507961] unregister_netdevice: waiting for tf-xxxxxxxx to become free. Usage count = 1
Hier unsere Docker-Informationen:
Client:
Version: 18.09.3
API version: 1.39
Go version: go1.10.8
Git commit: 774a1f4
Built: Thu Feb 28 06:34:04 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.3
API version: 1.39 (minimum version 1.12)
Go version: go1.10.8
Git commit: 774a1f4
Built: Thu Feb 28 05:59:55 2019
OS/Arch: linux/amd64
Experimental: false
WeiĂ jemand, ob es eine vorĂŒbergehende Lösung dafĂŒr gibt, ohne die gesamte Maschine neu zu starten? Wir wĂŒrden es vorziehen, nicht den gesamten Computer neu starten zu mĂŒssen, wenn dieses Problem auftritt.
Etwas off-topic, können wir die Kernel-Panik-Meldungen auch im Terminal nicht unterdrĂŒcken. Ich habe dmesg -D
und dmesg -n 1
ausprobiert. Jedoch kein GlĂŒck. Gibt es eine Möglichkeit, diese Art von Kernel-Panik-Nachrichten aus dem Terminal heraus zu unterdrĂŒcken? Es ist Ă€rgerlich zu versuchen, Befehle einzugeben und diese Meldung alle 10 Sekunden oder so erscheinen zu lassen.
Vielen Dank.
Sind diese Vanilla-Kernel oder stark von Distributionen mit zurĂŒckportierten Fixes gepatcht?
@pmoust Ich sehe dies etwa einmal pro Woche auf Ubuntu 4.15.0-32. definitiv viel besser seit 4.4.0
@iavael Ich werde versuchen, die Distributionsinformationen in der Zusammenfassung
Hat jemand diesen Fehler mit 4.19 gesehen?
Hat jemand diesen Fehler mit 4.19 gesehen?
https://github.com/kubernetes/kubernetes/issues/64743#issuecomment -451351435
https://github.com/kubernetes/kubernetes/issues/64743#issuecomment -461772385
Diese Informationen können fĂŒr Sie hilfreich sein.
@tankywoo @drpancake @egasimus @csabahenk @spiffytech @ibuildthecloud @sbward @jbalonso @rsampaio @MrMMorris @rsampaio @unclejack @chrisjstevenson @popsikle @fxposter @ scher200 @victorgp @jstangroome @ Xuexiang825 @dElogics @Nowaker @pmoust @marckamerbeek @Beatlor @warmchang @Jovons @ 247687009 @jwongz @ tao12345666333 @clkao Bitte schau dir das an https://pingcap.com/blog/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s/
@tankywoo @drpancake @egasimus @csabahenk @spiffytech @ibuildthecloud @sbward @jbalonso @rsampaio @MrMMorris @rsampaio @unclejack @chrisjstevenson @popsikle @fxposter @ scher200 @victorgp @jstangroome @ Xuexiang825 @dElogics @Nowaker @pmoust @marckamerbeek @Beatlor @warmchang @Jovons @247687009 @jwongz @tao12345666333 @clkao Bitte schau dir das an https://pingcap.com/blog/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s/
Ich habe die Dokumentation befolgt, aber ich bekomme immer noch einen Fehler.
[root<strong i="39">@node1</strong> ~]# kpatch list
Loaded patch modules:
livepatch_route [enabled]
Installed patch modules:
[root<strong i="40">@node1</strong> ~]#
Message from syslogd<strong i="41">@node1</strong> at May 7 15:59:11 ...
kernel:unregister_netdevice: waiting for eth0 to become free. Usage count = 1
Diese Nachricht selbst ist nicht der Fehler; es ist der Kernel, der danach abstĂŒrzt; https://github.com/moby/moby/issues/5618#issuecomment -407751991
@tankywoo @drpancake @egasimus @csabahenk @spiffytech @ibuildthecloud @sbward @jbalonso @rsampaio @MrMMorris @rsampaio @unclejack @chrisjstevenson @popsikle @fxposter @ scher200 @victorgp @jstangroome @ Xuexiang825 @dElogics @Nowaker @pmoust @marckamerbeek @Beatlor @warmchang @Jovons @247687009 @jwongz @tao12345666333 @clkao Bitte schau dir das an https://pingcap.com/blog/try-to-fix-two-linux-kernel-bugs-while-testing-tidb-operator-in-k8s/
Ich habe die Dokumentation befolgt, aber ich bekomme immer noch einen Fehler.
[root<strong i="40">@node1</strong> ~]# kpatch list Loaded patch modules: livepatch_route [enabled] Installed patch modules: [root<strong i="41">@node1</strong> ~]# Message from syslogd<strong i="42">@node1</strong> at May 7 15:59:11 ... kernel:unregister_netdevice: waiting for eth0 to become free. Usage count = 1
Nach dem Neustart, ok···
@vincent927 BTWïŒSie sollten livepatch_route.ko nach /var/lib/kpatch/$(uname -r) legen, wenn kpatch.service aktiviert ist, kann die ko nach dem Neustart automatisch geladen werden.
Das haben wir heute in unserem Unternehmen plötzlich in mehreren Kubernetes-Clustern bekommen.
uname -a
:
Linux ip-10-47-17-58 4.9.0-8-amd64 #1 SMP Debian 4.9.144-3.1 (2019-02-19) x86_64 GNU/Linux
docker version
:
Client:
Version: 18.09.5
API version: 1.39
Go version: go1.10.8
Git commit: e8ff056dbc
Built: Thu Apr 11 04:44:28 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.2
API version: 1.39 (minimum version 1.12)
Go version: go1.10.6
Git commit: 6247962
Built: Sun Feb 10 03:42:13 2019
OS/Arch: linux/amd64
Experimental: false
kubectl version
(Server):
Server Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.2", GitCommit:"cff46ab41ff0bb44d8584413b598ad8360ec1def", GitTreeState:"clean", BuildDate:"2019-01-10T23:28:14Z", GoVersion:"go1.11.4", Compiler:"gc", Platform:"linux/amd64"}
Wir kennen die Ursache noch nicht; Wir fĂŒhren diese Versionen der oben genannten Software seit mehreren Monaten ohne Probleme aus. Ich kommentiere nur, um die Liste der "Softwareversionen, bei denen dieser Fehler auftritt" vorerst zu ergĂ€nzen.
@ethercflow Ich habe das gelesen, aber da wir Debian in meiner Firma betreiben, ist es fĂŒr uns nicht einfach, den Fix in diesem Beitrag zu implementieren.
@ethercflow @2rs2ts wir fĂŒhren auch Debian aus. Ich bin auf viele Probleme gestoĂen, als ich versuchte, kpatch-build zum Laufen zu bringen. Wenn ich einen Workaround finde, halte ich euch auf dem Laufenden. Hat auf jeden Fall jemand eine andere Lösung? Ist es Kernel-Version 4.15 oder 4.19, die das Problem abschwĂ€cht? Ich habe in der letzten Woche versucht, die Antwort zu finden und es immer noch nicht geschafft.
@commixon unsere Erfahrung ist immer noch die gleiche wie in https://github.com/moby/moby/issues/5618#issuecomment -455800975 gemeldet, ĂŒber eine Flotte von tausend VMs kein erneutes Auftreten des Problems ab 4.15.0 generische, AWS-optimierte und GCP-optimierte Varianten der Kernel von Canonical. Der eingeschrĂ€nkte Test auf Vanilla 4.15.0 zeigte ebenfalls keine dieser Probleme, wurde jedoch nicht im groĂen MaĂstab getestet.
Vielen Dank @pmoust . Werde sie ausprobieren. Auf jeden Fall werde ich auch versuchen, kpatch zu patchen, damit es mit Debian funktioniert (als Nebenprojekt) und Updates hier fĂŒr alle Interessierten posten.
@ethercflow @2rs2ts wir fĂŒhren auch Debian aus. Ich bin auf viele Probleme gestoĂen, als ich versuchte, kpatch-build zum Laufen zu bringen. Wenn ich einen Workaround finde, halte ich euch auf dem Laufenden. Hat auf jeden Fall jemand eine andere Lösung? Ist es Kernel-Version 4.15 oder 4.19, die das Problem abschwĂ€cht? Ich habe in der letzten Woche versucht, die Antwort zu finden und es immer noch nicht geschafft.
Sie können auf 4.19 upgraden. Es ist in den Backports.
Ăbrigens ist es ein Jahr fĂŒr uns hier. ;)
Wir haben tatsĂ€chlich 4.19 in den Backports ausprobiert, aber es gab einige gröĂere RĂŒckschritte in anderen Bereichen (die EC2-Instanzen wĂŒrden einfach zufĂ€llig neu starten und dann wĂŒrde das Netzwerk beim Start unterbrochen werden).
@2rs2ts In den letzten 4 Tagen verwenden wir 4.19 von Backports (in EC2) und haben ĂŒberhaupt keine Probleme gesehen. Das Kernel-Absturzproblem ist ĂŒberhaupt nicht aufgetreten und alles andere scheint auch in Ordnung zu sein. Ich glaube nicht, dass es einen Unterschied macht, aber wir haben unser Debian-Image auf das von kops (https://github.com/kubernetes/kops/blob/master/docs/images.md#debian) gestĂŒtzt. Wir haben den Kernel in diesem Image aktualisiert und nicht das Standard-Debian.
Freunde, ich benutze den 4.19-Kernel fĂŒr einen stabilen Betrieb seit einem halben Jahr. Ich hoffe, dass Sie auch StabilitĂ€t genieĂen können.
Ich habe alle 2 Wochen einen Container mit offenem 80- und 443-Port, von einem anderen Computerzugriff auf Container 80 und
443 ist leugnen
centos7.3 Kernel-Version ist:
Linux-Browser1 3.10.0-514.el7.x86_64 #1 SMP Di 22. Nov 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
root@browser1 ~]# Docker-Version
Klient:
Version: 18.06.3-ce
API-Version: 1.38
Go-Version: go1.10.4
Git-Commit: d7080c1
Gebaut: Mi 20 Feb 02:24:22 2019
Betriebssystem/Arch: linux/amd64
Experimentell: falsch
Server:
Motor:
Version: 18.06.3-ce
API-Version: 1.38 (Mindestversion 1.12)
Go-Version: go1.10.3
Git-Commit: d7080c1
Gebaut: Mi 20 Feb 02:25:33 2019
Betriebssystem/Arch: linux/amd64
Experimentell: falsch
[ root@browser1 ~]#
dmesg:
[1063959.636785] unregister_netdevice: Warten darauf, dass lo frei wird. Nutzungsanzahl = 1
[1071340.887512] br-af29e1edc1b8: Port 5 (vethc2ac4f8) wechselte in den deaktivierten Zustand
[1071340.891753] br-af29e1edc1b8: Port 5 (vethc2ac4f8) trat in den deaktivierten Zustand ein
[1071340.895118] GerÀt vethc2ac4f8 hat den promiskuitiven Modus verlassen
[1071340.895138] br-af29e1edc1b8: Port 5 (vethc2ac4f8) trat in den deaktivierten Zustand ein
[1071340.990505] GerÀt veth5e4f161 wechselte in den Promiscuous-Modus
[1071340.990897] IPv6: ADDRCONF(NETDEV_UP): veth5e4f161: Link ist nicht bereit
[1071340.990904] br-af29e1edc1b8: Port 5(veth5e4f161) hat den Weiterleitungsstatus erreicht
[1071340.990924] br-af29e1edc1b8: Port 5(veth5e4f161) hat den Weiterleitungsstatus erreicht
[1071341.231405] IPv6: ADDRCONF(NETDEV_CHANGE): veth5e4f161: Link wird bereit
[1071355.991701] br-af29e1edc1b8: Port 5(veth5e4f161) hat den Weiterleitungsstatus erreicht
[1071551.533907] br-af29e1edc1b8: Port 5 (veth5e4f161) trat in den deaktivierten Zustand ein
[1071551.537564] br-af29e1edc1b8: Port 5 (veth5e4f161) trat in den deaktivierten Zustand ein
[1071551.540295] GerÀt veth5e4f161 hat den Promiscuous-Modus verlassen
[1071551.540313] br-af29e1edc1b8: Port 5 (veth5e4f161) trat in den deaktivierten Zustand ein
[1071551.570924] GerÀt veth8fd3a0a wechselte in den Promiscuous-Modus
[1071551.571550] IPv6: ADDRCONF(NETDEV_UP): veth8fd3a0a: Link ist nicht bereit
[1071551.571556] br-af29e1edc1b8: Port 5(veth8fd3a0a) hat den Weiterleitungsstatus erreicht
[1071551.571582] br-af29e1edc1b8: Port 5(veth8fd3a0a) hat den Weiterleitungsstatus erreicht
[1071551.841656] IPv6: ADDRCONF(NETDEV_CHANGE): veth8fd3a0a: Link wird bereit
[1071566.613998] br-af29e1edc1b8: Port 5(veth8fd3a0a) hat den Weiterleitungsstatus erreicht
[1071923.465082] br-af29e1edc1b8: Port 5 (veth8fd3a0a) wechselte in den deaktivierten Zustand
[1071923.470215] br-af29e1edc1b8: Port 5 (veth8fd3a0a) wechselte in den deaktivierten Zustand
[1071923.472888] GerÀt veth8fd3a0a hat den Promiscuous-Modus verlassen
[1071923.472904] br-af29e1edc1b8: Port 5 (veth8fd3a0a) wechselte in den deaktivierten Zustand
[1071923.505580] GerÀt veth9e693ae wechselte in den Promiscuous-Modus
[1071923.505919] IPv6: ADDRCONF(NETDEV_UP): veth9e693ae: Link ist nicht bereit
[1071923.505925] br-af29e1edc1b8: Port 5(veth9e693ae) hat den Weiterleitungsstatus erreicht
[1071923.505944] br-af29e1edc1b8: Port 5(veth9e693ae) hat den Weiterleitungsstatus erreicht
[1071923.781658] IPv6: ADDRCONF(NETDEV_CHANGE): veth9e693ae: Link wird bereit
[1071938.515044] br-af29e1edc1b8: Port 5(veth9e693ae) hat den Weiterleitungsstatus erreicht
Hat jemand diesen Fehler mit 4.19 gesehen?
Jawohl. Ich habe das Problem mit Kernel 4.19.4-1.e17.elrep.x86_64
Hallo,
Ich sehe diesen Fehler auch. Haben wir eine Lösung fĂŒr dieses Problem? Kernel 3.10.0-514.26.2.el7.x86_64
[username@ip-10-1-4-64 ~]$
Message from syslogd@ip-10-1-4-64 at Jul 19 10:50:01 ...
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
Message from syslogd@ip-10-1-4-64 at Jul 19 10:50:48 ...
kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1
Dieses Problem tritt immer noch auf :(kein Update/Ideen zur Behebung?
Geschieht auf Debian Stretch. Ich habe versucht, meinen Jenkins-Container ĂŒber Ansible zu aktualisieren, als dies geschah.
Dieses Problem wurde durch diesen Commit gelöst:
https://github.com/torvalds/linux/commit/ee60ad219f5c7c4fb2f047f88037770063ef785f
kpatch verwenden
curl -SOL https://raw.githubusercontent.com/Aleishus/kdt/master/kpatchs/route.patch
kpatch-build -t vmlinux route.patch
mkdir -p /var/lib/kpatch/${UNAME}
cp -a livepatch-route.ko /var/lib/kpatch/${UNAME}
systemctl restart kpatch
kpatch list
Dieses Problem wurde durch diesen Commit gelöst:
torvalds/ linux@ee60ad2
kpatch verwendencurl -SOL https://raw.githubusercontent.com/Aleishus/kdt/master/kpatchs/route.patch kpatch-build -t vmlinux route.patch mkdir -p /var/lib/kpatch/${UNAME} cp -a livepatch-route.ko /var/lib/kpatch/${UNAME} systemctl restart kpatch kpatch list
Dies muss ab 4.19.30 sein.
Ich bin mir nicht sicher, ob torvalds/ linux@ee60ad2 die endgĂŒltige Lösung dafĂŒr ist - wir haben dies in 4.4.0 AFAR gesehen, wĂ€hrend https://github.com/torvalds/linux/commit/deed49df7390d5239024199e249190328f1651e7 erst in 4.5.0 hinzugefĂŒgt wurde
Wir haben den gleichen Fehler reproduziert, indem wir einen Diagnose-Kernel verwendet haben, in den kĂŒnstlich Verzögerungen eingefĂŒgt wurden, damit die Ausnahmerouten der PMTU-Erkennung dieses Fenster treffen.
diff --git a/net/ipv4/route.c b/net/ipv4/route.c
index a0163c5..6b9e7ee 100644
--- a/net/ipv4/route.c
+++ b/net/ipv4/route.c
@@ -133,6 +133,8 @@
static int ip_min_valid_pmtu __read_mostly = IPV4_MIN_MTU;
+static int ref_leak_test;
+
/*
* Interface to generic destination cache.
*/
@@ -1599,6 +1601,9 @@ static void ip_del_fnhe(struct fib_nh *nh, __be32 daddr)
fnhe = rcu_dereference_protected(*fnhe_p, lockdep_is_held(&fnhe_lock));
while (fnhe) {
if (fnhe->fnhe_daddr == daddr) {
+ if (ref_leak_test)
+ pr_info("XXX pid: %d, %s: fib_nh:%p, fnhe:%p, daddr:%x\n",
+ current->pid, __func__, nh, fnhe, daddr);
rcu_assign_pointer(*fnhe_p, rcu_dereference_protected(
fnhe->fnhe_next, lockdep_is_held(&fnhe_lock)));
fnhe_flush_routes(fnhe);
@@ -2145,10 +2150,14 @@ static struct rtable *__mkroute_output(const struct fib_result *res,
fnhe = find_exception(nh, fl4->daddr);
if (fnhe) {
+ if (ref_leak_test)
+ pr_info("XXX pid: %d, found fnhe :%p\n", current->pid, fnhe);
prth = &fnhe->fnhe_rth_output;
rth = rcu_dereference(*prth);
if (rth && rth->dst.expires &&
` time_after(jiffies, rth->dst.expires)) {
+ if (ref_leak_test)
+ pr_info("eXX pid: %d, del fnhe :%p\n", current->pid, fnhe);
ip_del_fnhe(nh, fl4->daddr);
fnhe = NULL;
} else {
@@ -2204,6 +2213,14 @@ static struct rtable *__mkroute_output(const struct fib_result *res,
#endif
}
+ if (fnhe && ref_leak_test) {
+ unsigned long time_out;
+
+ time_out = jiffies + ref_leak_test;
+ while (time_before(jiffies, time_out))
+ cpu_relax();
+ pr_info("XXX pid: %d, reuse fnhe :%p\n", current->pid, fnhe);
+ }
rt_set_nexthop(rth, fl4->daddr, res, fnhe, fi, type, 0);
if (lwtunnel_output_redirect(rth->dst.lwtstate))
rth->dst.output = lwtunnel_output;
@@ -2733,6 +2750,13 @@ static int ipv4_sysctl_rtcache_flush(struct ctl_table *__ctl, int write,
.proc_handler = proc_dointvec,
},
{
+ .procname = "ref_leak_test",
+ .data = &ref_leak_test,
+ .maxlen = sizeof(int),
+ .mode = 0644,
+ .proc_handler = proc_dointvec,
+ },
+ {
.procname = "max_size",
.data = &ip_rt_max_size,
.maxlen = sizeof(int),
ref_leak_test_begin.sh:
#!/bin/bash
# constructing a basic network with netns
# client <-->gateway <--> server
ip netns add svr
ip netns add gw
ip netns add cli
ip netns exec gw sysctl net.ipv4.ip_forward=1
ip link add svr-veth type veth peer name svrgw-veth
ip link add cli-veth type veth peer name cligw-veth
ip link set svr-veth netns svr
ip link set svrgw-veth netns gw
ip link set cligw-veth netns gw
ip link set cli-veth netns cli
ip netns exec svr ifconfig svr-veth 192.168.123.1
ip netns exec gw ifconfig svrgw-veth 192.168.123.254
ip netns exec gw ifconfig cligw-veth 10.0.123.254
ip netns exec cli ifconfig cli-veth 10.0.123.1
ip netns exec cli route add default gw 10.0.123.254
ip netns exec svr route add default gw 192.168.123.254
# constructing concurrently accessed scenes with nerperf
nohup ip netns exec svr netserver -L 192.168.123.1
nohup ip netns exec cli netperf -H 192.168.123.1 -l 300 &
nohup ip netns exec cli netperf -H 192.168.123.1 -l 300 &
nohup ip netns exec cli netperf -H 192.168.123.1 -l 300 &
nohup ip netns exec cli netperf -H 192.168.123.1 -l 300 &
# Add delay
echo 3000 > /proc/sys/net/ipv4/route/ref_leak_test
# making PMTU discovery exception routes
echo 1 > /proc/sys/net/ipv4/route/mtu_expires
for((i=1;i<=60;i++));
do
for j in 1400 1300 1100 1000
do
echo "set mtu to "$j;
ip netns exec svr ifconfig svr-veth mtu $j;
ip netns exec cli ifconfig cli-veth mtu $j;
ip netns exec gw ifconfig svrgw-veth mtu $j;
ip netns exec gw ifconfig cligw-veth mtu $j;
sleep 2;
done
done
ref_leak_test_end.sh:
#!/bin/bash
echo 0 > /proc/sys/net/ipv4/route/ref_leak_test
pkill netserver
pkill netperf
ip netns exec cli ifconfig cli-veth down
ip netns exec gw ifconfig svrgw-veth down
ip netns exec gw ifconfig cligw-veth down
ip netns exec svr ifconfig svr-veth down
ip netns del svr
ip netns del gw
ip netns del cli
Der Testprozess:
ref_leak_test_begin.sh
,ref_leak_test_end.sh
,[root<strong i="13">@iZuf6h1kfgutxc3el68z2lZ</strong> test]# bash ref_leak_test_begin.sh
net.ipv4.ip_forward = 1
nohup: ignoring input and appending output to ânohup.outâ
nohup: set mtu to 1400
appending output to ânohup.outâ
nohup: appending output to ânohup.outâ
nohup: appending output to ânohup.outâ
nohup: appending output to ânohup.outâ
set mtu to 1300
set mtu to 1100
set mtu to 1000
set mtu to 1400
set mtu to 1300
set mtu to 1100
^C
[root<strong i="14">@iZuf6h1kfgutxc3el68z2lZ</strong> test]# bash ref_leak_test_end.sh
[root<strong i="15">@iZuf6h1kfgutxc3el68z2lZ</strong> test]#
Message from syslogd<strong i="16">@iZuf6h1kfgutxc3el68z2lZ</strong> at Nov 4 20:29:43 ...
kernel:unregister_netdevice: waiting for cli-veth to become free. Usage count = 1
Nach einigen Tests kann torvalds/ linux@ee60ad2 diesen Fehler tatsÀchlich beheben.
Hat jemand diesen Fehler mit 4.19 gesehen?
gleich
Ja, auf Debian! Gibt es eine Möglichkeit das zu unterdrĂŒcken?
Ich habe herausgefunden, dass meine Docker-Protokolle auch Spam erhalten. Kernel 5.4.0, Docker 19.03.8:
Mar 21 18:46:14 host.mysite.com dockerd[16544]: time="2020-03-21T18:46:14.127275161Z" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
Mar 21 18:45:13 host.mysite.com dockerd[16544]: time="2020-03-21T18:45:13.642050333Z" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
Mar 21 18:44:13 host.mysite.com dockerd[16544]: time="2020-03-21T18:44:13.161364216Z" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
Mar 21 18:43:12 host.mysite.com dockerd[16544]: time="2020-03-21T18:43:12.714725302Z" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete"
Ich habe endlich herausgefunden, wie ich diese Nachrichten ĂŒbrigens unterdrĂŒcken kann. Aus dieser Frage auf StackExchange habe ich diese Zeile in /etc/rsyslog.conf
:
# Everybody gets emergency messages
#*.emerg :omusrmsg:*
Sehr nukleare Option, aber zumindest ist mein System jetzt wieder verwendbar!
@steelcowboy Sie können
Ich habe folgendes in /etc/rsyslog.d/40-unreigster-netdevice.conf
und rsyslog systemctl restart rsyslog
neu gestartet.
# match frequent not relevant emergency messages generated by Docker when transfering large amounts of data through the network
:msg,contains,"unregister_netdevice: waiting for lo to become free. Usage count = 1" /dev/null
# discard matching messages
& stop
Gibt es hier Neuigkeiten?
Hilfreichster Kommentar
(diese https://github.com/moby/moby/issues/5618#issuecomment-351942943 hier noch einmal wiederholen, da GitHub alte Kommentare versteckt)
Wenn Sie hier ankommen
Das hier diskutierte Problem ist ein Kernel-Bug und wurde noch nicht vollstĂ€ndig behoben. Einige Patches wurden in den Kernel eingefĂŒgt, die _einige_ Vorkommen dieses Problems beheben, aber andere sind noch nicht behoben.
Es gibt eine Reihe von Optionen, die fĂŒr _manche_ Situationen hilfreich sein können, aber nicht fĂŒr alle (wiederum; höchstwahrscheinlich handelt es sich um eine Kombination von Problemen, die denselben Fehler auslösen).
Der Fehler "unregister_netdevice: Warten darauf, dass lo frei wird" selbst ist nicht der Fehler
Wenn der Kernel _nach_ abstĂŒrzt, ist das ein Fehler (siehe unten)
Hinterlasse keine "Das habe ich auch"-Kommentare
"Ich habe das auch" hilft nicht, den Fehler zu beheben. Hinterlassen Sie nur einen Kommentar, wenn Sie Informationen haben, die zur Lösung des Problems beitragen können (in diesem Fall ist die Bereitstellung eines Patches fĂŒr den Kernel-Upstream möglicherweise der beste Schritt).
Wenn Sie wissen möchten, dass Sie auch dieses Problem haben , verwenden Sie
Wenn Sie ĂŒber Updates informiert bleiben möchten, verwenden Sie den _Abonnieren-Button_.
Jeder Kommentar hier sendet eine E-Mail / Benachrichtigung an ĂŒber 3000 Personen. Ich möchte die Konversation zu diesem Thema nicht abschlieĂen, da es noch nicht gelöst ist, aber möglicherweise gezwungen wird, wenn Sie dies ignorieren.
Ich werde Kommentare entfernen, die keine nĂŒtzlichen Informationen hinzufĂŒgen, um den Thread (etwas) zu kĂŒrzen
Wenn Sie bei der Lösung dieses Problems helfen möchten
Vielen Dank!