How to Fix the ownCloud File Locking “Lock Mechanism Timeout” Error
If ownCloud reports a file locking timeout during sync, upload, move, rename, or chunk assembly, the first thing to know is that the error usually involves transactional file locking, not the user-facing Manual File Locking feature. Transactional locking is an internal safety mechanism that prevents two requests from saving or mutating the same file at the same time. It is enabled by default in ownCloud and can use the database or Redis as its locking backend.
Current ownCloud 11 documentation still recommends Redis for transactional file locking because database-backed locks create significant database load. On clustered installations, every application node must use the same shared Redis instance for locking. That is the durable fix to understand before changing timeout values or deleting lock records.
This guide walks through the problem from a beginner administrator's perspective: what the lock means, what to back up, how to confirm the failing component, how to configure Redis, how clusters change the picture, and which shortcuts can make the situation worse.
What the error means
When ownCloud changes a file, it acquires a lock so another request cannot perform an incompatible change at the same time. The lock can also cover a parent directory so it cannot be renamed while work is happening inside it. If the lock cannot be acquired in time, the operation can fail with a locked-resource or timeout-style error rather than risking a corrupted file.
This is different from Manual File Locking, the optional WebDAV-based check-in/check-out feature that lets a user deliberately lock a file in the web interface. Manual locks have configurable user-facing expiration values. Changing those values does not fix a transactional lock backend that is overloaded or incorrectly configured.
Before you start
Back up the ownCloud database and config/config.php.
Record your ownCloud version and deployment type: traditional package, Docker Compose, or multi-node cluster.
Identify your database engine and whether Redis is already installed.
Record the exact operation that fails, such as a desktop sync, WebDAV upload, folder rename, or chunked upload.
Note whether the problem affects one file, one user, or many users at the same time.
A broad outage affecting many users usually points to a shared component such as the lock backend, database, Redis, or storage. A repeatable error on one file may instead involve a genuinely active operation or a stale lock that has not yet expired.
Step 1: Confirm which locking mechanism is failing
Start with the ownCloud log, web server log, PHP-FPM log, and Redis service status. You are looking for repeated locked-resource exceptions, database lock-wait errors, Redis connection failures, or a pattern where the same path remains blocked long after the original operation ended.
Check the ownCloud error log and the health of PHP and Redis before changing lock settings. The goal is to determine whether the timeout comes from lock contention, an unavailable backend, or a slow database.
A healthy Redis command should return PONG. If ownCloud is configured to reach Redis through a socket, container hostname, password, or remote host, test the same connection path ownCloud actually uses rather than assuming that a local redis-cli test proves application connectivity.
If the log contains a database message similar to “lock wait timeout exceeded,” investigate database contention as well. The old database locking backend is functional, but ownCloud's documentation explicitly warns that it places significant load on the database.
Step 2: Move transactional file locking to Redis
For a traditional ownCloud installation, configure Redis as the memcache.locking backend in config/config.php. The current ownCloud memory caching documentation provides a Redis TCP example similar to this:
Use Redis as the transactional locking backend instead of leaving high-volume locking work in the database. Adapt the host, port, socket, and authentication values to your environment.
Do not copy the empty password literally into an Internet-exposed Redis setup. The ownCloud memory caching documentation recommends protecting Redis appropriately. Ideally, Redis should be reachable only from trusted ownCloud hosts or the internal container network.
In the official ownCloud Docker configuration, Redis is enabled with environment variables. Current ownCloud 11 documentation shows:
When Redis is enabled in that deployment model, ownCloud sets both the distributed cache and locking cache to Redis automatically. Use the deployment-specific configuration documented for your installation instead of mixing Docker environment variables with a manually maintained config.php unless you understand which layer wins.
Step 3: In a cluster, make every node use the same Redis
A cluster is a deployment with multiple ownCloud application servers behind a load balancer. In this design, a lock created on one application node must be visible to every other node. Per-node APCu caches or separate per-node Redis instances cannot provide that shared lock state.
In a multi-node ownCloud deployment, all application servers must use the same Redis locking service so every node sees the same file lock state.
Przewodnik po klastrowanym, współdzielonym magazynie danych ownCloud jasno określa: należy używać jednej współdzielonej instancji Redis, do której dostęp mają wszystkie węzły aplikacji. Ostrzega on przed poleganiem na blokadach systemu plików lub NFS do blokowania aplikacji ownCloud.
Sprawdź każdy węzeł pod kątem tego samego punktu końcowego Redis i poświadczeń. Częstym schematem awarii jest to, że jeden węzeł nadal korzysta z bazy danych lub lokalnego Redis, podczas gdy pozostałe korzystają z usługi współdzielonej. Powoduje to niespójne działanie blokady, które może sprawiać wrażenie przerywanego, ponieważ wynik zależy od tego, który węzeł aplikacji obsługuje każde żądanie.
Krok 4: Sprawdź konfigurację i spróbuj ponownie wykonać oryginalną operację
Po skonfigurowaniu Redis sprawdź aktywne ustawienia ownCloud za pomocą occ. W zależności od instalacji, polecenie może zostać wywołane jako użytkownik serwera WWW lub przez Docker Compose.
Pierwsze polecenie powinno zgłosić błąd \OC\Memcache\Redis, a blokowanie plików transakcyjnych powinno pozostać włączone. Nie „rozwiązuj” problemu poprzez wyłączenie blokowania plików. To usuwa zabezpieczenie integralności danych zamiast naprawiać zaplecze.
Sprawdź łączność Redis i aktywną blokadę ownCloud, a następnie powtórz synchronizację lub przesyłanie, które pierwotnie się nie powiodło. Pełne skanowanie plików nie jest wymagane, aby potwierdzić naprawienie blokady.
Teraz spróbuj ponownie wykonać tę samą operację, która się nie powiodła. Jeśli przekroczono limit czasu przesyłania danych przez klienta stacjonarnego, powtórz przesyłanie. Jeśli przenoszenie folderu się nie powiodło, powtórz przenoszenie. Obserwuj logi ownCloud i Redis podczas testu. Pomyślna ponowna próba bez powtarzającego się przekroczenia limitu czasu blokady jest znacznie silniejszym dowodem niż uruchomienie niezwiązanego z tym polecenia konserwacyjnego.
Co zrobić, jeśli plik nadal wygląda na zablokowany?
Najpierw sprawdź, czy inna operacja rzeczywiście nadal korzysta z pliku. Duże operacje przesyłania, wywołania pamięci zewnętrznej, przenoszenie plików, szyfrowanie lub powolne działanie pamięci masowej mogą legalnie utrzymywać blokady dłużej niż oczekiwano. Zniesienie blokady, gdy operacja jest nadal aktywna, może spowodować wyścig, któremu blokada miała zapobiegać.
Blokady transakcyjne są zaprojektowane tak, aby były zwalniane po przerwaniu transakcji. Starsze odniesienia do konfiguracji ownCloud dokumentują również mechanizm czasu życia blokady, dzięki czemu stare blokady mogą być automatycznie usuwane. Ponieważ dokładne szczegóły konfiguracji mogą się różnić w zależności od wersji ownCloud, przed zmianą opcji należy sprawdzić w dokumentacji, czy odpowiada ona zainstalowanej wersji. Nie należy ustawiać bardzo krótkiego czasu życia (TTL) tylko po to, aby ukryć problem z wolnym działaniem pamięci masowej lub bazy danych.
Jeśli same metadane są niespójne, ownCloud udostępnia polecenia skanowania plików zorientowane na naprawę. Oficjalna dokumentacja polecenia occ zaleca utworzenie kopii zapasowej bazy danych przed skanowaniem w celu naprawy. Skanowanie w celu naprawy służy do wykrywania uszkodzonych lub niespójnych metadanych plików; nie jest to pierwsza linijka rozwiązania problemu z normalnym blokowaniem.
Nie należy mylić blokowania transakcyjnego z ręcznym blokowaniem plików
Ustawienia limitu czasu blokady WebDAV i wyłącznika blokady
Aktualna dokumentacja ownCloud 11 informuje, że ręczne blokowanie plików w interfejsie internetowym jest domyślnie wyłączone. Po włączeniu, blokada interfejsu internetowego trwa domyślnie 30 minut, a maksymalny czas to 24 godziny. Wartości te są opisane w przewodniku ręcznego blokowania plików .
Jeśli Twój problem dotyczy blokady ręcznej utworzonej przez użytkownika, wówczas odpowiednie będą następujące polecenia:
Jeśli problemem jest wewnętrzne przekroczenie limitu czasu podczas synchronizacji lub zapisywania pliku, zmiana tych wartości blokady ręcznej zazwyczaj nie jest właściwym rozwiązaniem.
Typowe błędy, które pogarszają czas przekroczenia blokady
Usuwanie wierszy blokad z bazy danych, gdy ownCloud jest aktywny
Może to kolidować z aktywnymi żądaniami i usuwać prawidłowe blokady. Rozwiązuje to również problem bez naprawiania bazy danych lub konfiguracji Redis, która spowodowała przekroczenie limitu czasu.
Wyłączanie blokowania plików transakcyjnych
Blokada transakcyjna służy ochronie operacji na plikach przed jednoczesną modyfikacją. Pozostaw ją włączoną i napraw zaplecze.
Wykorzystanie APCu do współdzielonego blokowania w klastrze
APCu to lokalna pamięć podręczna dla każdego węzła. Nadaje się do lokalnego buforowania, ale nie zapewnia jednego współdzielonego stanu blokady dla wielu serwerów aplikacji. Użyj współdzielonego Redis do rozproszonych i blokujących pamięci podręcznych we wdrożeniach klastrowych.
Uruchamianie jednej instancji Redis na każdy węzeł aplikacji
To sprawia, że każdy serwer ma inny widok blokad plików. Wszystkie węzły potrzebują tej samej współdzielonej usługi Redis do koordynacji blokad.
Zwiększanie czasu oczekiwania na blokadę bazy danych bez rozwiązywania konfliktów
Dłuższy limit czasu bazy danych może jedynie wydłużyć oczekiwanie użytkowników. Przeniesienie ruchu związanego z blokadą transakcyjną do Redis zmniejsza obciążenie bazy danych związane z blokadą i eliminuje wąskie gardło architektoniczne.
Uczynienie wygaśnięcia blokady nierealistycznie krótkim
Powolna operacja na zewnętrznym nośniku danych lub przesyłanie dużych ilości danych może wymagać czasu. Przedwczesne wygaśnięcie blokady może umożliwić kolejnemu żądaniu jednoczesną modyfikację tego samego zasobu.
Szybka lista kontrolna rozwiązywania problemów
Sprawdź, czy błąd dotyczy blokady transakcyjnej, a nie blokady utworzonej ręcznie przez użytkownika.
Sprawdź logi ownCloud, PHP, bazy danych i Redis w okolicach tego samego znacznika czasu.
Sprawdź, czy dostęp do Redis jest możliwy z poziomu środowiska wykonawczego ownCloud, a nie tylko z poziomu powłoki.
Ustaw memcache.lockingna \OC\Memcache\Redis.
Pozostaw filelocking.enabledwłączone.
W klastrze każdy węzeł powinien być skierowany do tej samej instancji Redis.
Spróbuj ponownie wykonać oryginalną synchronizację, przesłanie lub przeniesienie, monitorując jednocześnie dzienniki.
Używaj skanowania naprawczego lub zmian daty wygaśnięcia blokady tylko wtedy, gdy dowody wskazują na uszkodzenie metadanych lub nieaktualne blokady.
Podsumowanie
Najpewniejszym sposobem rozwiązania błędów przekroczenia limitu czasu blokowania plików w ownCloud nie jest usuwanie blokad ani zwiększanie dowolnych wartości limitu czasu. Zacznij od ustalenia, czy błąd wynika z blokowania transakcji, a następnie przenieś obciążenie związane z blokadą do Redis i upewnij się, że każdy węzeł ownCloud widzi tę samą instancję Redis. Przetestuj ponownie tę samą operację, która się nie powiodła, i sprawdź opóźnienie bazy danych lub pamięci masowej, jeśli blokady nadal pozostają aktywne zbyt długo.
To podejście jest zgodne z aktualną dokumentacją ownCloud: blokowanie plików transakcyjnych pozostaje włączone, Redis obsługuje współdzielony stan blokady, a ustawienia limitu czasu ręcznego blokowania plików są traktowane jako osobna funkcja, a nie jako uniwersalne rozwiązanie problemu z limitem czasu blokady.