[unix] 특정 디렉토리에서 디스크 I / O를 어떻게 모니터링 할 수 있습니까?

단일 디렉토리의 파일에 쓰는 알려진 이름의 프로세스가 몇 개 있습니다. 나는의 수를 기록하고 싶습니다 디스크 블록 읽기 및 기간에 걸쳐 기록 ( 하지 파라미터 변경 / O 크게 I의 양을 감소 여부를 테스트에 바로 파일 액세스). 현재을 사용 iostat -d -p하고 있지만 전체 파티션으로 제한됩니다.



답변

나는 이것이 단순하고 터무니없는 소리를 낼 것이라는 것을 알고 있지만 문제의 응용 프로그램 (테스트 환경에서)을 제어 할 수 있다면 해당 디렉토리 만 자체 파티션에 마운트 할 수 있습니다 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,

그것은 모든 경쟁 디스크 I / O를 완전히 제거하지는 않지만, iostat출력이 당신의 필요에 더 구체적 일 것이라고 확신 합니다.


답변

직접적인 방법이 없다고 생각합니다. 원하는 데이터를 얻는 한 가지 방법은 액세스 를 기록 하는 가상 파일 시스템 을 통해 디렉토리 트리에 액세스하는 것입니다. Loggedfs 는 그러한 파일 시스템 중 하나이지만 관심있는 모든 데이터를 보여줄 수 있는지는 알 수 없습니다.

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


답변

inotify-toolsinotifywait -m DIRNAME 에서 사용할 수 있습니다 .


답변