
내 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
- 제삼: 잠금 모드(ADVISORY 또는 MANDATORY)
- 앞으로: 공유 잠금 또는 배타적 잠금에 해당하는 잠금 유형(쓰기 또는 읽기)입니다.
- 다섯: 잠금이 있는 프로세스의 PID입니다.
- 육도 음정:
:
잠긴 파일을 식별하는 3개의 숫자로 구분됩니다. - 제칠: 잠금의 시작 바이트입니다.
- 여덟 번째:잠금의 끝 바이트
답변2
잠금 파일이 생성된 타임스탬프를 보면 잠금 파일이 얼마나 오래되었는지 알 수 있습니다. 마찬가지로 "cat logfile.name"을 입력하면 이를 생성한 프로세스 ID가 유일한 콘텐츠로 포함되는 경우가 많습니다.