У меня есть спор по поводу моего Linux-сервера. Один из множества процессов обращается к одному файлу и блокирует его в случайное время на значительный период (> 60 секунд), что, в свою очередь, приводит к сбою других вещей.
Есть ли способ обнаружить сколько файл был заблокирован и каким процессом?
Я думаю, что вы ищете файл /proc/locks
. Он показывает текущие блокировки файлов в системе. Это не показывает как долго файл был заблокирован, но это показывает каким процессом. Возможно, вам удастся определить, когда блокировка зарегистрирована в этом файле, и измерить прошедшее время. Пример такой:
cat /proc/locks
1: POSIX ADVISORY WRITE 2245 08:06:1182714 1073741824 1073741824
2: POSIX ADVISORY WRITE 2245 08:06:1182714 1073741826 1073742335
3: POSIX ADVISORY WRITE 3058 08:06:10752740 0 0
4: POSIX ADVISORY WRITE 3058 08:06:10752739 0 0
5: POSIX ADVISORY WRITE 2421 08:06:10752766 0 EOF
6: POSIX ADVISORY WRITE 2421 08:06:11142048 0 EOF
7: POSIX ADVISORY WRITE 2421 08:06:9964366 1073741824 1073742335
8: POSIX ADVISORY WRITE 2421 08:06:11142040 0 EOF
Где столбцы:
fcntl
и FLOCK
если создано с flock
.:
который идентифицировал заблокированный файл.Вы можете узнать, сколько лет файлу блокировки, просто взглянув на метку времени, когда он был создан. Точно так же, если вы "cat logfile.name", очень часто в качестве единственного содержимого будет идентификатор процесса, который его создал.