Как обнаружить исключительно длительные блокировки файлов в Linux?

Как обнаружить исключительно длительные блокировки файлов в Linux?

У меня есть спорный момент на моем сервере Linux. Один из нескольких процессов обращается к одному файлу и блокирует файл в случайное время на значительный период (>60 секунд), что, в свою очередь, приводит к сбою других вещей.

Есть ли способ обнаружитьсколькофайл был заблокирован и каким процессом?

решение1

Я думаю, что вы ищете файл /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

Где находятся столбцы:

  • Первый: замок #.
  • Второй: тип блокировки (POSIX, если блокировка была создана с помощью, fcntlи FLOCKесли создана с помощью flock.
  • Третий: режим блокировки (РЕКОМЕНДАТЕЛЬНЫЙ или ОБЯЗАТЕЛЬНЫЙ)
  • Вперед: Тип блокировки (ЗАПИСЬ или ЧТЕНИЕ), соответствующий общей или исключительной блокировке.
  • Пятый: PID процесса с блокировкой.
  • Шестой: Три числа, разделенные цифрой : , идентифицирующей заблокированный файл.
  • Седьмой: Начальный байт блокировки.
  • Восьмой:Конечный байт блокировки

решение2

Вы можете узнать, насколько стар файл блокировки, просто посмотрев на временную метку, когда он был создан. Аналогично, если вы "cat logfile.name", он очень часто будет иметь в качестве своего единственного содержимого идентификатор процесса, который его создал.

Связанный контент