documentation. 여기서 설명하는 것 이상으로 유용한 command 및 atop
에서 출력하는 정보에 대한 내용이 써져 있으니 궁금하면 찾아보자.
background에서 주기적으로 CPU, memory, disk I/O 등을 process 혹은 thread가 얼마나 했는지를 분석하고 이를 로그로 남기는 command다.
또한 htop
처럼 실시간으로 각 process 혹은 thread가 위를 얼마나 소모했는지 분석하는 것도 가능하다.
보통 설치를 해야 하는데, 다음과 같은 command를 사용하면 된다.
$ sudo apt-get install atop
atop
command를 terminal에 입력하면 먼저 stdout이 스크린 상에 연결이 되어 있는지, 아니면 파일이나 pipe에 연결되어 있는지를 파악한다.htop
처럼 실시간으로 분석을 하는 화면이 나오게 된다. 후자의 경우 파일에다가 실시간으로 나올 화면 output을 주기적으로 저장한다. 실시간 화면의 경우 밑과 같다.atop [-g|-m|-d|-n|-u|-p|-s|-c|-v|-o] [-C|-M|-D|-N|-A] [-af1x] [-L linelen] [-Plabel[,label]...] [ interval [ samples ]]
그러면 output을 파일에 저장하도록 시킬거면, 즉 실시간 분석 화면이 아닌 background에서 분석하면서 로깅을 하려고 하면 어떻게 해야 하는가? -w
flag를 사용하면 된다. 뒤에 파일 이름까지 지정해줘야 한다. 이미있는 파일 이름이고 그게 raw data file인것도 확인이 되면 파일 내용물 끝에 이어서 기록을 한다.
경로를 따로 알려주지 않고 파일 이름만 적으면 현재 경로에다가 해당 rawfile을 저장한다.
실시간 화면도 그렇고 이 저장방식도 그런데, output에 남는 process는 지정된 주기동안 활동을 한 process들만 기록이 된다. 즉 process가 존재하더라도 해당 주기에서 활동을 아무것도 안했으면 기록이 안 남는데, 이것은 -a
flag를 통해 활동 안한 process들도 기록이 남도록 수정하는게 가능하다. (참고로 실시간 화면에서는 a
버튼을 누르면 된다.)
기본적으로 주기는 10초이며, sampling 횟수는 무한대다. 즉 강제로 종료되지 않을 때까지 sampling을 하는 것이다. sampling 횟수랑 주기는 전부 수정이 가능하며, sampling 횟수 설정 대신 -S
를 사용해가지고 자정 전에 끝나도록 설정하는 것도 가능하다.
format은 다음과 같다.
atop -w rawfile [-a] [-S] [ interval [ samples ]]
atop -r [ rawfile ] [-b hh:mm ] [-e hh:mm ] [-g|-m|-d|-n|-u|-p|-s|-c|-v|-o] [-C|-M|-D|-N|-A] [-f1x] [-L linelen] [-Plabel[,label]...]
atop은 설치가 되자마자 atop.daily
라는 script file을 저장한다. 이게 뭘 하냐면 atop
을 매 자정마다 실행, 10분 간격으로 /var/log/atop/atop_YYYYMMDD라는 파일에다가 저장한다. 또 4주 이상 지난 rawfile은 전부 삭제한다. 여기서 YYYY는 시작 연도, MM은 달, DD는 날짜에 해당한다. 2023년 12월 1일의 경우 atop_20231201이라는 파일에 저장이 될 것이다.
위 script file은 cron
daemon이 관리한다. 아까 말한 script file의 저장 경로는 정확히는 /etc/atop/atop.daily
에 존재하는데, cron
daemon은 0 0 * * * root /etc/atop/atop.daily
라는 구문을 실행한다.
저 구문은 cron
job entry인데, 매년 매월 매일 0시 0분에 (0 0 * * *
), root 권한으로 (root
), /etc/atop/atop.daily
를 수행한다는 것을 의미한다.
system mode(sys)와 user mode(user)에서 CPU가 얼마나 가동되었는지를 알려준다.
running 중인 process(#proc) / running 중인 thread(#trun) / sleeping interruptible(#tslpi) / sleeping uninterruptible(#tslpu) / zombie(#zombie) / clone system call('clones') / 종료된 process('exit') 개수를 전부 알려준다.
CPU에 load되서 돌아갈 수 있는 thread들(R), 혹은 disk I/O를 기다리는 thread들(D)에 대한 평균 부하(load average) 정보를 나타낸다. 평균 부하에서 흔히 사용되는 단위인 1분, 5분, 15분 평균을 측정한다.
context switch 횟수, interrupt 처리 횟수, 가용가능 cpu 개수도 보여준다.
Transport layer
IP layer
Active Interface
PID : process-id. 가끔 '?'가 나오는데, 측정되던 interval에서 생성되고 바로 종료된 경우에 그렇다. 단 'acct'라는 kernel patch가 설치되면 해당 경우에도 잘 나온다.
SYSCPU : system call handling 때문에 system mode에서 해당 process가 CPU를 사용한 시간
USRCPU : user mode에서 해당 process가 CPU를 사용한 시간
RGROW : 물리 메모리 사용량이 저번 주기동안 얼마나 늘어났는지 알려준다.
VGROW : 가상 메모리 사용량이 저번 주기동안 얼마나 늘어났는지 알려준다.
EXC : 저번 주기에 종료된 녀석인 경우, exit code가 무엇이었는지 알려준다.
THR : process에서 사용한 thread 개수
S : process의 main thread의 현재 상태
CPUNR : main thread가 최근에 실행된, 아니면 현재 실행 중인 cpu core 번호
CPU : CPU 사용 비중
CMD : process 이름.
g (-g) : 위의 사진에서 나온 기본 창 모드
m (-m) : 메모리와 관련해서 더 상세한 정보가 나온다.
d (-d) : 디스크와 관련해서 더 상세한 정보가 나온다.
n (-n) : 네트워크와 관련해서 더 상세한 정보가 나온다.
c (-c) : process의 전체 command line을 보여준다.
C (-C) : CPU 사용량에 따라 정렬
M (-M) : 메모리 소모량에 따라 정렬
D (-D) : 디스크 사용량에 따라 정렬
N (-N) : 네트워크 사용량에 따라 정렬. netatop
kernel이 설치된 경우에만 작동
A (-A) : 가장 많이 사용된 system 자원에 따라 정렬
앞에서 소개한 interactive mode 단축키들을 여기서 전부 flag 형태로 사용하는게 가능하다.
-b : raw file의 특정 시간 이후만을 선택할 때 사용. -e와 혼용 가능.
-e : raw file의 특정 시간 이전을 선택할 때 사용. -b와 혼용 가능.
-L : 줄 길이 조절. 기본은 80개 ASCII character.
y : filename에 y를 집어넣을 경우, 현재 날짜 기준 어제의 log file이 자동으로 열린다. 여러개를 연속으로 넣어서 n일차 전 log file을 여는게 가능하다 (ex : yyyy
를 사용하면 4일 전 log file이 자동으로 열린다.)
일단 가장 큰 차별점은 interactive mode에서 주기적으로 보여주는 데이터를 파일에도 저장하는게 지원된다는 것이다. htop도 좀 더러운 방법으로 가능은 하나 command상에서 깔끔하게 지원하는 방식은 없다.
특히 '특정 주기'동안 실행된 process/thread의 자원 소모량을 분석하기 때문에 현재 시점에서 이미 종료된 process나 thread의 자원 소모량도 분석이 가능하다는 장점이 있다.
그리고 네트워크/디스크 I/O 자원을 얼마나 소모했는지도 알려준다는 장점이 있다. htop
은 이게 불가능하다.
단점도 물론 있다. 일단 마우스 스크롤이랑 마우스 클릭을 지원하지 않는다. 순수 키보드를 통해 조작을 해야 한다.
또 다른 단점은 기본적으로 색깔이 없어서 예쁘지 않다는 것이다(...). 극단적으로 자원을 사용하는 것들은 색깔 부여를 하나 그 외의 경우에는 다 검정이나 하양이어서 분석에 약간 애로사항이 있을 수 있다.
둘 다 기본 Linux에서는 제공이 되지 않다보니, 편의성 및 필요한 기능에 따라 사용할 녀석을 고르면 된다. 둘 다 설치하거나
AWS에서 atop
을 활용한 analysis에 대한 글이 있다. 사용할거면 참고. 한국어도 지원된다.