특정 디렉터리의 디스크 I/O를 모니터링하는 방법은 무엇입니까?

특정 디렉터리의 디스크 I/O를 모니터링하는 방법은 무엇입니까?

단일 디렉터리의 파일에 모두 쓰는 알려진 이름을 가진 여러 프로세스가 있습니다. 내가 기록하고 싶은 수량일정 기간 동안 디스크 블록에 대한 읽기 및 쓰기 수(아니요파일 액세스만 해당) 매개변수 변경으로 인해 I/O 양이 크게 감소하는지 여부를 테스트합니다. 현재 이것을 사용하고 있지만 iostat -d -p전체 파티션으로 제한됩니다.

답변1

이것이 단순하고 우스꽝스럽게 들린다는 것을 알지만, 문제의 응용 프로그램을 제어할 수 있는 경우(아마도 테스트 환경에서) 디렉토리를 자체 파티션에 마운트한 다음 기다려서 iostat그것에 대해 알려주기만 하면 됩니다. 가리키다.

물리적 드라이브가 관련된 경우 루프백 마운트를 사용하여 가짜로 만들 수 있습니다.

dd if=/dev/zero of=/bigdisk/LOOPFILE bs=1024m count=1024m # 1gb loopback file
mke2fs -j /bigdisk/LOOPFILE
mkdir /tmpcopy
mount -o loop /tmpcopy /bigdisk/LOOPFILE
cp -r -p $SPECIALDIR2MONITOR /tmpcopy
umount /tmpcopy
mount -o loop $SPECIALDIR2MONITOR  /bigdisk/LOOPFILE,

iostat이렇게 하면 경쟁하는 모든 디스크 I/O가 완전히 제거되지는 않지만 출력이 사용자의 요구에 더 구체적일 것이라고 확신합니다 .

답변2

당신이 inotifywait -m DIRNAME사용할 수있는이노티파이 도구.

답변3

직접적인 방법은 없는 것 같아요. 필요한 데이터를 얻는 한 가지 방법은가상 파일 시스템방문을 기록합니다.저널 파일 시스템그것은 당신이 관심 있는 모든 데이터를 표시할 수 있는지는 모르겠지만 그런 파일 시스템입니다. (그렇지 않다면 해당 데이터에 대해 적당한 인코딩 작업을 수행할 수도 있습니다.)

mkdir /tmp/replica
loggedfs /path/to/directory /tmp/replica
mycommand --root=/tmp/replica
fusermount -u /tmp/replica

관련 정보