Analyse de l’état interne.
Génération d’un thread dump via kill -SIGUSR1 $(pidof dockerd)
.
Dans les logs du journal journalctl -xe
on trouve alors :
juil. 27 21:22:52 ns350873 dockerd[1763]: time="2017-07-27T21:22:52.918617952+02:00" level=info msg="goroutine stacks written to /var/run/docker/goroutine-stacks-2017-07-27T212252+0200.log"
Et dans le fichier référencé, rechercher les threads locked
. Certains sont normaux (runtime.gopark, runtime.goexit - souvent présents depuis le lancement), d’autres non comme :
goroutine 15702 [syscall, 129 minutes, locked to thread]:
github.com/docker/docker/pkg/devicemapper._Cfunc_dm_udev_wait(0xd4d1b0a, 0x0)
github.com/docker/docker/pkg/devicemapper/_obj/_cgo_gotypes.go:418 +0x4d
github.com/docker/docker/pkg/devicemapper.dmUdevWaitFct(0xd4d1b0a, 0x138357b)
/build/docker/src/src/github.com/docker/docker/pkg/devicemapper/devmapper_wrapper.go:222 +0x2a
github.com/docker/docker/pkg/devicemapper.UdevWait(0xc423764ae0, 0x0, 0x0)
/build/docker/src/src/github.com/docker/docker/pkg/devicemapper/devmapper.go:260 +0x39
(...)
qui dénote ici un figeage côté devicemapper.
Dans ce cas précis, le figeage se libère via dmsetup udevcomplete_all
.