Skip to content

External library watching - excessive CPU load and NFS traffic #20858

Description

@oujesky

I have searched the existing issues, both open and closed, to make sure this is not a duplicate report.

  • Yes

The bug

I have external library served over NFS with the "library watching" feature on. Immich is running as a docker container with the NFS bind mount propagated to the docker image as a docker volume. So far this was working very good, newly added files to the external library are detected almost immediately by immich server and processed.

After upgrade to version v1.137.x I noticed increased CPU consumption by the immich-server container and very high load/traffic on the NFS server (Synology NAS)

Image Image

I didn't do any other changes to the setup apart from upgrading immich docker image to latest version.

There are no relevant logs that would suggest any problem apart from the watch start.

I noticed there was a change to the chokidar library responsible for the file watch feature in db0415b - bumped from 3.5.3 to 4.0.3

The OS that Immich Server is running on

Proxmox VE / Debian 12

Version of Immich Server

v1.137.3

Version of Immich Mobile App

Platform with the issue

  • Server
  • Web
  • Mobile

Your docker-compose.yml content

services:
  immich-server:
    container_name: immich_server
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    # extends:
    #   file: hwaccel.transcoding.yml
    #   service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
    volumes:
      # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
      - ${UPLOAD_LOCATION}:/usr/src/app/upload
      - /etc/localtime:/etc/localtime:ro
      - /mnt/photo/Lightroom:/mnt/media/lightroom
      - /mnt/photo/iCloud:/mnt/media/icloud
      - ...
    env_file:
      - .env
    ports:
      - 2283:2283
    depends_on:
      - redis
      - database
    restart: always
    healthcheck:
      disable: false
  immich-machine-learning:
    container_name: immich_machine_learning
    # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
    # Example tag: ${IMMICH_VERSION:-release}-cuda
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    # extends: # uncomment this section for hardware acceleration - see https://immich.app/docs/features/ml-hardware-acceleration
    #   file: hwaccel.ml.yml
    #   service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable
    volumes:
      - model-cache:/cache
    env_file:
      - .env
    restart: always
    healthcheck:
      disable: false
  redis:
    container_name: immich_redis
    image: docker.io/valkey/valkey:8-bookworm@sha256:ff21bc0f8194dc9c105b769aeabf9585fea6a8ed649c0781caeac5cb3c247884
    healthcheck:
      test: redis-cli ping || exit 1
    restart: always
  database:
    container_name: immich_postgres
    image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
      POSTGRES_INITDB_ARGS: --data-checksums
      # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs
      # DB_STORAGE_TYPE: 'HDD'
    volumes:
      # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    restart: always
volumes:
  model-cache: null
networks:
  default:
    external: true
    name: nginx-proxy

Your .env content

# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables

# The location where your uploaded files are stored
UPLOAD_LOCATION=/mnt/immich/library

# The location where your database files are stored. Network shares are not supported for the database
DB_DATA_LOCATION=/mnt/immich/postgres

# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
TZ=Europe/Prague

# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release

# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=<REDACTED>

# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=<REDACTED>
DB_DATABASE_NAME=immich

Reproduction steps

  1. Have external library with "Library watching" on
    ...

Relevant log output

LOG [Microservices:LibraryService] Starting to watch library <UUID> with import path(s) /mnt/media/lightroom,/mnt/media/icloud

Additional information

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    Status
    Ready

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions