특정 Linux 디렉터리 또는 파일의 I/O 스트림에서 읽거나 쓴 바이트 수를 모니터링하는 방법은 무엇입니까?

특정 Linux 디렉터리 또는 파일의 I/O 스트림에서 읽거나 쓴 바이트 수를 모니터링하는 방법은 무엇입니까?

특정 디렉터리의 I/O 스트림(지정된 기간 동안 읽고 쓴 바이트 수)을 모니터링하는 데 문제가 있습니다.

iostat, inotifywait및 을 사용하려고 시도했지만 inotifywatch불행히도 디렉터리의 활동(열기, 닫기, 수정 등)만 측정하고 읽고 쓴 바이트에 대한 정보는 제공하지 않습니다.

답변1

한 가지 옵션은 시스템을 사용하는 것입니다 audit. 그것은 다음과 같습니다:

sudo auditctl -a exit,always -F dir=/the/directory -p rw

그런 다음 audit.logI/O 시스템 호출을 분석합니다.

답변2

내가 아는 한, 이를 수행할 수 있는 표준 도구는 없습니다. 그러나 나는 이를 달성하는 여러 가지 방법을 생각할 수 있으며 각각에는 단점이 있습니다.

어떤 프로세스가 파일/디렉토리에 액세스할 것인지 알고 프로세스가 다른 I/O를 거의 또는 전혀 수행하지 않는 것으로 판단되면 /(모든 I/O)를 확인하여 /proc/PID/io읽거나 쓴 바이트 수를 구문 분석하고 확인할 수 있습니다. 또는 / (디스크 I/O) 또는 심지어 / (read()/write()와 같은 시스템 호출 수).rcharwcharread_byteswrite_bytessyscrsyscw

어떤 프로세스가 파일/디렉토리에 액세스할지 모르지만(그러나 이러한 프로세스가 다른 I/O를 거의 또는 전혀 수행하지 않는 것으로 확신하는 경우) 이 inotify기능을 사용하여 위치를 모니터링하고 PID를 확인한 다음 다음을 수행해야 합니다. 이전 단락 중간에 설명된 메커니즘.

과정이 괜찮다면하다다른 I/O는 약간 더 복잡해집니다. strace파일/디렉터리를 가리키는 모든 파일 설명자에 대한 모든 읽기/쓰기 호출에 대한 오프셋을 계산 해야 합니다 .

이러한 모든 솔루션은 단일 바이트까지 정확하지는 않지만 좋은 추정치를 제공할 수 있습니다.

관련 정보