[Proc] $ top, $ lsof, $ strace, $ ltrace, /usr/bin/time

markyang92·2021년 9월 30일
0
post-thumbnail

$ top

top key설명
Space bar화면 업데이트
M현재 상주 메모리 사용량에 따라 분류
T전체 누적 CPU 사용량에 따라 분류
P현재 CPU 사용량만 보고 분류 (default)
H스레드 출력
u오로지 한 사용자의 프로세스만 보여준다.
f다른 종류의 통계자료가 나타나도록 선택
?모든 top 명령에 대한 사용법의 개요
ksig kill 보냄 PID 지정 (default 현재 top의 최상단 프로세스)
s업데이트 주기를 변경한다. (초 단위)

f: 통계 자료 변경

  • top 실행 중 f 키를 누르면, 통계 자료를 변경하여 볼 수 있다.
  • 'd' 혹은 '<Space>'로 통계를 선택/해제 한다.
  • 's'로 현재 선택된 통계치를 기준으로 sort set

$ top -p pid1 [-p pid2 ...]

$ top -p pid1 [-p pid2 ...]
  • top에다 -p pid1 옵션과 매개변수로 <pid1> 만 모니터링 할 수 있다.
$ top -p 1

  • PID = 1 (systemd)에 대한 top 모니터링

/usr/bin/time

  • 하나의 명령이 지속되는 시간동안 얼마나 많은 CPU 시간을 사용하는지 보여 줌
  • 대부분의 셸에 time을 내장하고 있는데, 이보다 /usr/bin/time을 사용하면 보다 자세히 볼 수 있다.
$ /usr/bin/time [-o <output_file>] <명령>
  • 결과
0.05user 0.09system 0:00.44elapsed 31%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (125major+51minor)pagefaults 0swaps
  • 사용자 시간(User time): CPU가 해당 프로그램 자체 코드를 실행하는 데 소비한 '초'단위 시간
  • 시스템 시간(System time): 커널이 프로세스의 작업(e.g. 파일이나 디렉터리를 읽는 작업)을 하는데 걸리는 시간
  • 경과 시간(Elapsed time): 프로세스가 시작~종료까지 실행하는 데, 걸리는 전체 시간
    CPU가 다른 작업을 하는데 보낸 시간도 포함된다. 이 숫자는 보통 성능을 측정할 경우 그다지 유용하지 않지만, 경과 시간에서 사용자 시간과 시스템 시간을 빼면, 프로세스가 시스템 리소스를 기다리는 데, 보내는 시간이 대략 얼마나 걸리는지 알 수 있다.
시간설명
사용자 시간(User time)CPU가 해당 프로그램 자체 코드를 실행하는 데 소비한 '초'단위 시간
시스템 시간(System time)커널이 프로세스의 작업(e.g. 파일이나 디렉터리를 읽는 작업)을 하는데 걸리는 시간
경과 시간(Elapsed time)프로세스가 시작~종료까지 실행하는데, 걸리는 전체 시간
CPU가 다른 작업을 하는데 보낸 시간도 포함
프로세스 자체의 성능을 측정하는데는 좋지않음
Elapsed time - (System time + User time) = 프로세스가 리소스를 기다리는 시간

$ lsof

  • 열려 있는 파일(네트워크 리소스, 동적 라이브러리, 파이프 등)
$ lsof

COMMANDPIDUSERFDTYPEDEVICESIZENODENAME
fd 보유 프로세스PID프로세스
실행하는 사용자
열려있는 fd파일 타입파일을 보유하고 있는
device의 major, minor 번호
파일 크기파일의
아이노드 숫자
파일 명

$ lsof /usr

  • /usr에 열려있는 파일 항목들

$ lsof -p <pid>


$ strace

  • 시스템 콜을 출력한다.
$ strace cat /dev/null
  • 'cat /dev/null'을 실행하면서 무슨 시스템 콜을 사용했고 return 값을 보여줌
  1. execve("/usr/bin/cat", ["cat", "/dev/null"]
  2. brk(): 메모리 초기화 콜
  3. openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3: return 3fd

$ strace cat not_a_file


$ strace -o <file> -ff <process>

  • -o <file>: 지정한 <file>.pid 형식으로 output file을 write.
    • .pid-ff <process>가 생성한 자식 프로세스 PID
$ strace -o out_strace -ff echo 'hello'


$ ltrace

  • ltrace 명령은 공유 라이브러리 콜을 추적한다.
  • ltrace는 커널 레벨에서는 어떤 것도 추적하지 않는다!
profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글