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


10

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



1
파일 자체에 관심이 없지만 I / O의 양에 관심이 있기 때문에 이러한 질문과 다릅니다.
l0b0

답변:


10

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


3

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

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

2

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


-dinotifywait 3.13에는 존재하지 않습니다. 당신은 의미 -m합니까?
l0b0

@ l0b0 : 아, git repo에서 3.14를 사용합니다. 죄송합니다. 그러나 맨 페이지 -m는 백그라운드에서 실행되고 아웃 파일이 필요한 경우를 제외하고 는 동일하다고 설명합니다 .
Tobias Kienzler

또한 -r유용 할 수 있습니다
Tobias Kienzler

1
그것을 테스트했습니다. 오해에 대해 유감스럽게 생각하지만 액세스 한 파일 (또는 파일 수)에 관심이없고 I / O의 양에 관심이 있습니다.
l0b0

2
이것은 Linux에 따라 다릅니다. BSD에는 kqueue가 있고 시스템 호출을 주석 처리하지만 저자가 요청한 것을 정확하게 수행하는지는 알 수 없습니다.
Shawn J. Goff
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.