Linux의 C++ 응용 프로그램 용 디스크 IO 프로파일 러




profiling (2)

프로그램은 디스크에서 방대한 양의 데이터를 읽지 만 읽는 파일이나 읽은 코드의 위치를 ​​모릅니다.

이 도구를 리눅스에서 모니터 할 수 있습니까?

관련 질문 (windows) : 기존 응용 프로그램의 디스크 IO 프로파일 러


Answer #1

시스템이 IO로 정말 바쁜 경우, top 보면 IO-bound 프로세스가 보통 D-state에 걸린 것을 볼 수 있습니다.

strace -c myprog 는 모든 제네릭에서 '내 응용 프로그램이 무엇인가 / 가장 많은 시간을 보내고 있습니까?'라는 질문에 가장 친한 친구입니다. Strace는 실행중인 프로세스에 연결할 수도 있으므로 실행중인 프로그램을 볼 수 있습니다.
또 다른 좋은 strace 트릭은 ( strace -o myprogrun.log ) 로그 파일에 출력 한 다음 로그를 강조 표시하는 매우 훌륭한 작업 구문을 수행하므로 현대적인 vim 으로 볼 수 있습니다. 기본 strace 출력은 사람이 읽을 수있는 것이 아니기 때문에이 방법을 찾는 것이 훨씬 쉽습니다.

기억해야 할 중요한 점은 IO 문제가있는 곳보다 다른 파티션 / 디스크 세트에 로그하는 것입니다! strace가 많은 출력을 생성 할 수 있으므로 추가 입출력 문제를 유도하지 마십시오. 나는 그런 경우를 위해 TmpFS 또는 ZRAM RAM 디스크를 사용하는 것을 좋아한다.


Answer #2

따라서 /proc/PID/fd 또는 lsof -p PID 사용할 수 있습니다.

프로세스가 사용하는 파일을 알아야합니다.

예를 들어, lsof -p 27666 (27666이 a.out 프로그램의 PID라고 가정)을 보면 다음과 같이 볼 수 있습니다 :

./a.out 22531 me    9w   REG   8,5   131072   528280 /home/me/tmp/test.db
./a.out 22531 me    9r   REG   8,5   131072   528280 /home/me/tmp/test2.db






profiling