내 시스템에서 sar
보고된 평균 디스크 쓰기 속도는 약 5MB/s입니다. 사용하면서 dstat
영구적이지는 않지만 30-50MB/s의 스파이크가 발생하고 잠자기 상태가 됩니다.
그것을 사용하면서 iotop
나는 대부분의 글쓰기가 앱에 의해 이루어진다는 것을 발견했습니다(그러나 그것이 얼마나 확실한지는 모르겠습니다).
를 사용하면 strace
앱 fatrace
이 열리고 다른 디렉터리에 파일이 생성된 다음 해당 파일을 닫거나 삭제하는 것을 볼 수 있습니다. 문서는 많지만 strace
텍스트가 많지 않습니다. 계속 늘어나는 파일(로그 등)이 있는지 알아보기 위해 추가 정보를 찾아보았지만 /proc/pid/fd
찾을 수 없습니다. 그래서 내 결론은 모든 쓰기가 응용 프로그램에서 생성된 작은 임시 파일을 통해 수행된다는 것입니다.
각 파일에 얼마만큼 기록되었는지 확인하는 방법은 무엇입니까? 각 파일에 기록된 바이트 수를 포함하는 보고서를 원합니다.
이를 수행할 수 있는 방법이 있습니까? 각 파일의 변경 사항을 확인하거나 사용하는 open
것과 같은 시스템 호출을 다시 작성하거나 사용하는 것을 고려했지만 더 쉬운 방법이 있기를 바랍니다.write
systemtap
답변1
브렌든 그레그(Brendan Gregg)의 iosnoop
(그의 일부)perf-tools
)는 애플리케이션의 I/O에 대한 자세한 정보를 제공합니다. 예를 들면 다음과 같습니다.
# ./iosnoop
Tracing block I/O... Ctrl-C to end.
COMM PID TYPE DEV BLOCK BYTES LATms
supervise 1809 W 202,1 17039968 4096 1.32
supervise 1809 W 202,1 17039976 4096 1.30
tar 14794 RM 202,1 8457608 4096 7.53
tar 14794 RM 202,1 8470336 4096 14.90
tar 14794 RM 202,1 8470368 4096 0.27
tar 14794 RM 202,1 8470784 4096 7.74
tar 14794 RM 202,1 8470360 4096 0.25
tar 14794 RM 202,1 8469968 4096 0.24
tar 14794 RM 202,1 8470240 4096 0.24
[...]
(다음에서 가져온 예그의 블로그).
이를 사용하여 시스템의 모든 I/O를 추적하거나(위에서 언급한 대로) 단일 프로세스, 장치로 제한할 수 있습니다.
답변2
시도해 볼 수 있습니다(보통 커널 2.6부터 패키지됨 inotify
). inotify tools
파일 시스템의 일부를 모니터링하고 파일 또는 디렉터리 생성/삭제와 같은 이벤트를 알려줍니다.
간단한 사용법은 다음과 같습니다:
inotifywait -m -r /tmp/
그런 다음 파일 시스템 활동이 발생하면 다음이 표시됩니다.
#=> I'm creating /tmp/b
/tmp/ CREATE,ISDIR b
/tmp/ OPEN,ISDIR b
/tmp/ ACCESS,ISDIR b
/tmp/ CLOSE_NOWRITE,CLOSE,ISDIR b
man inotifywait
그리고 man inotifywatch
더 자세히 알아보세요.
넓은 파일 시스템에서 inotify를 사용하는 것은 리소스 집약적입니다...
stat
이를 (예: 보기 소유자) 및/또는 lsof
(현재 열려 있는 모든 파일과 해당 프로세스 표시) 와 결합하면 누가 책임이 있는지에 대한 더 많은 단서를 얻을 수 있습니다.
편집하다:inotify
및 조합의 예 stat
:
inotifywait -m -r /tmp --format "%w%f" -e modify | while read newfile
do
echo $newfile $(stat -c "%s" $newfile) bytes
done
그러면 다음과 같이 출력됩니다.
/tmp/oaoa 24 bytes
/tmp/oaoa 24 bytes
/tmp/.com.google.Chrome.iLdh1J 0 bytes
/tmp/.com.google.Chrome.iLdh1J 1472 bytes