2

У нас есть кластер Centos 7, поддерживаемый NFS4. На нем есть несколько файлов, которые запускают flock с блоками LOCK_EX (и с LOCK_NB возвращает ресурс, временно недоступный). Только горстка файлов, и у них есть все причины, по которым у пользователя была бы причина собираться ().

Поэтому что-то блокирует эти файлы. Но кто? Мы пытались запустить lsof на каждой машине в кластере, но ничего не получилось, но, возможно, есть клиенты, о которых мы не знаем. Программа lslocks не помогает.

Как я могу узнать, какая машина, не говоря уже о том, какой процесс имеет блокировку?
Или возможно, что NFS смущена и думает, что есть блокировка, даже если процесс давно завершен? В каком случае, как я узнаю, так ли это, и как мне это очистить? Перезапуск сервера NFS требует запроса на изменение, так что это не так-то просто сделать.
То же самое касается стратегии перезапуска всех клиентов по одному.

Хотя многие веб-страницы утверждают, что flock() не работает в NFS, другие говорят, что это работает (например, https://serverfault.com/questions/66919/file-locks-on-an-nfs), и мои тесты подтверждают это из. Например, запустите:

perl -E 'открыть $ fh, ">>", сдвинуть или умереть "Открыть: $!"; скажите" Готово открыто "; собирайтесь ($ fh, 2) или умрите" flock: $!"; скажи" Готово, стадо "; sleep 10 'somefilename

Запустите его на одном клиенте, подождите 5 секунд, запустите его на другом, и второй не напечатает "Done flock", пока первый не выйдет через 5 секунд. Как раз то, что вы ожидаете. Таким образом, сервер NFS знает, что файл заблокирован. Как мне заставить его сказать, кто, по его мнению, заблокировал его?

0