immich-ml: LD_PRELOAD leeren gegen gunicorn-25.1.0-Fork-Deadlock

immich_machine_learning haengt seit dem 7.6. unhealthy: der gunicorn-Worker
bleibt nach "Control socket listening" in futex_do_wait stehen und erreicht
nie "Application startup complete" (/ping -> ConnectTimeout/ReadTimeout).
Kein OOM (22 GB frei), kein Disk-I/O-Wait, laeuft als root, Socket wird
erstellt - klassischer Fork-Deadlock von mimalloc (LD_PRELOAD) im geforkten
Worker unter gunicorn 25.1.0.

mimalloc per LD_PRELOAD="" deaktiviert. Reine Allocator-Optimierung,
funktional unkritisch, reversibel. Bekannte Upstream-Regression seit
Immich 2.6 (immich#27228, #22317) ohne offiziellen Fix; Restart und
force-recreate sind dort als wirkungslos dokumentiert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-10 11:02:27 +02:00
parent ce747f687f
commit ed55b88ec1
+9
View File
@@ -34,6 +34,15 @@ services:
container_name: immich_machine_learning
image: ghcr.io/immich-app/immich-machine-learning:release@sha256:a2501141440f10516d329fdfba2c68082e19eb9ba6016c061ac80d23beadf7f3
restart: unless-stopped
environment:
# Workaround fuer gunicorn-25.1.0-Fork-Deadlock (Worker haengt in futex
# nach "Control socket listening", erreicht nie "Application startup
# complete"). mimalloc per LD_PRELOAD deaktiviert -> umgeht den Lock im
# geforkten Worker. Reine Allocator-Optimierung, funktional unkritisch.
# Upstream-Regression seit Immich 2.6 (immich#27228, #22317), kein
# offizieller Fix. Re-check: bei Immich-/gunicorn-Update entfernen und
# pruefen, ob der Worker wieder sauber bootet.
LD_PRELOAD: ""
volumes:
- model-cache:/cache
networks: