https://netflixtechblog.com/linux-performance-analysis-in-60-000-milliseconds-accc10403c55

 

Linux Performance Analysis in 60,000 Milliseconds

You log in to a Linux server with a performance issue: what do you check in the first minute?

netflixtechblog.com

b.luavis.kr/server/linux-performance-analysis

 

Luavis' Dev Story - 리눅스 서버 60초안에 상황파악하기

 

b.luavis.kr

 

위의 블로그 내용을 공부한 후 필기한 내용을 적는다.

내가 알아보기 쉽도록 풀어서 썼음.

 

 

아래 소개되는 일부 커맨드들은 sysstat package 을 설치해야 한다고 함.

아래는 ubuntu 에서 sysstat 을 설치하는 명령어

 

sudo apt install sysstat -y

 

 

 

 

1. uptime

 

uptime 에서 알 수 있는 정보는 다음과 같음.

  • 현재시각(시:분:초 up)
  • 머신 부팅 후 지속된 시간 (일, 시:분)
  • 로그인한 사용자 수 (n user)
  • cpu 평균 부하율 (1분/5분/15분)

여기서 말하는 cpu 평균 부하율(load average)이란, 코어 당 cpu 점유율 이라고 보면 된다.

예를 들어,

내 컴퓨터가 코어 1개만을 갖고 있고 uptime 의 평균 부하율이 1.0 이라면, cpu 는 100%만큼 일하고 있다(1.0/1*100=100%)

내 컴퓨터가 코어 1개만을 갖고 있고 uptime 의 평균 부하율이 0.7 이라면, cpu 는 70%만큼 일하고 있다(0.7/1*100=70%)

내 컴퓨터가 코어 2개를 갖고 있고 uptime 의 평균 부하율이 1.0 이라면, cpu 는 50%만큼 일하고 있다(1.0/2*100=50%)

내 컴퓨터가 코어 2개를 갖고 있고 uptime 의 평균 부하율이 2.0 이라면, cpu 는 100%만큼 일하고 있다(2.0/2*100=100%)

내 컴퓨터가 코어 4개를 갖고 있고 uptime 의 평균 부하율이 1.0 이라면, cpu 는 25%만큼 일하고 있다(1.0/4*100=50%)

내 컴퓨터가 코어 4개를 갖고 있고 uptime 의 평균 부하율이 3.0 이라면, cpu 는 75%만큼 일하고 있다(3.0/4*100=75%)

 

평균 점유율이 100%을 넘길때가 있다.

예를 들어 내 컴퓨터 코어는 1개인데 평균 부하율이 2.0 를 보여준다면,

cpu 는 현재 100% 만큼 일하고 있으며, 추가로 100% 만큼이 cpu 를 사용하기 위해 대기하고 있다.

시스템 운영을 위해서는 평균 부하율이 0.7 정도 나오는 것이 좋다고 함.

평균 점유율이 100%을 넘어가도 컴퓨터가 멈추거나 하는 건 아니지만,

과부하가 걸리는 것은 맞으니 시스템을 점검해야 한다고.

만약 500%가 넘어가면 그 땐 시스템에 이상이 생길 수 있으니 반드시 점검하라고 함.

 

uptime 은 각각 1분, 5분, 15분 동안 측정된 평균 부하율 값을 보여준다.

1분 보다는 5분, 15분의 값을 보는 것이 좋다.

uptime 이 보여주는 cpu 평균 부하율은 /proc/loadavg 의 내용을 나타낸다. 평균 부하율을 계산해서 보여주는 건 아님.

 

추가적으로, 내 컴퓨터의 cpu 코어 개수를 알기 위해서 아래 명령어 참고

 

grep -c processor /proc/cpuinfo

 

참고

webisfree.com/2020-05-30/리눅스-명령어-uptime-알아보기

kim-dragon.tistory.com/45

klero.tistory.com/entry/리눅스-uptime-명령어와-Load-Average-분석-평균-부하율-분석

 

 

 

 

 

 

2. dmesg | tail

 

dmesg 는 diagnostic message 의 약어이다.

dmesg 명령어는 시스템 메세지를 확인할 수 있는 커맨드임.

부팅시에 인식한 장치 등 시스템 진단에 필요한 유용한 정보를 제공한다.

부팅 이후에도 특정 사용자의 su 전환 실패나 IO 장치 오류 등 운영에 필요한 정보를 출력한다.

 

부팅 이후부터 쌓인 시스템 메세지를 모두 확인 가능하기 때문에 간략하게 보기 위해 tail 을 사용하여

가장 뒤에 10개 줄만 출력한다.

시스템 메세지를 통해 성능에 문제를 줄 수 있는 에러를 찾을 수 있다고 함.

예를 들어 커널 부팅 중 생긴 에러를 이 명령어를 통해 찾아낼 수 있다.

혹은 out of memory 등의 에러가 왜 생겼는지 알 수 있다.

 

새로운 로그가 추가되는 것을 지켜보기 위해서 -w 옵션을 같이 사용.

마치 tail -f 명령어를 사용한 것 처럼 실시간으로 쌓이는 로그를 볼 수 있다.

dmesg -w

 

dmesg 의 로그파일 위치는 /var/log/dmesg 이다.

 

centos 7 이상 버전부터는 -T 옵션을 사용하여,

부팅 시작 이후 시간이 아닌 해당 로그가 찍힌 시간을 표시할 수 있다.

dmesg -T

 

참고

www.lesstif.com/lpt/log-dmesg-98926711.html

 

 

 

 

 

 

3. vmstat 1 10

 

vmstat 은 virtual memory stat 의 약어이다.

vmstat 은 아래와 같은 정보를 보여준다.

  • procs
    • r : run queue. 작업 수행을 위해 CPU 자원을 process 의 수. 아래 이미지의 ready
          r 항목이 많으면 많을수록, CPU 를 사용하기 위한 process 의 수가 많다는 것을 의미.
          즉, OS 자체의 bottleneck 이 존재함을 의미함
    • b : blocked queue. 메모리 혹은 IO 응답을 기다리며 blocked 된 process 의 수. 아래 이미지의 waiting
    • w : swap-out 되는 process 의 수. 이 값이 증가는 memory 가 굉장히 부족하다는 것을 의미함

procs 는 아래 그림을 보면 아 이거구나 라고 느낌이 팍 오...면 좋겠따 ㅎㅎ

 

 

  • memory : memory 정보. 단위는 4KB. free -m 명령어를 통해서 같은 내용을 볼 수 있음
    • swpd : 사용중인 swap memory 의 크기
    • free : OS 가 사용 가능한 memory의 크기. 즉 현재 사용하지 않는, 여유 memory 공간의 크기
          만약 숫자가 352000 이 떴다면, 352000 * 4KB = 1.408 GB 정도의 여유 memory 를 의미함
    • buff : buffer 로 사용중인 memory 의 크기
    • cache : cache 로 사용중인 memory 의 크기

buff 에 대해 더 자세히 찾아봄.

buffer 는 임시저장소 같은 느낌의 공간임

예를 들어 file write 를 진행할 때, 내용을 곧바로 file 로 저장하지 않고 이 buffer 에 일단 담아두고,

나중에 CPU 가 여유가 좀 생길 때 이 buffer 에 담아두었던 내용을 file 에 write 한다고 함

데이터 처리를 위한 임시공간이라는 점에서 cache 와 공통점이 있지만,

cache 와는 다르게 buffer는 한 번만 사용됨

 

cache 에 대한 설명은 여기 링크 참고.

 

  • swap : memory swap 정보. 단위는 KB/s
    • si : swap-in 된 메모리의 양. 즉, disk 에서 memory 로 swap-in 하는 양
          disk 내 swap 공간에 있는 데이터를 memory 로 호출
    • so : swap-out 된 메모리의 양. 즉, memory 에서 disk 로 swap-out 하는 양
          memory 가 부족하기 때문에 swap-out 이 발생하여 disk 로 memory 의 데이터를 보냄
          이 값이 높으면 memory 점검을 해봐야 함.
  • io : disk IO. 단위는 blocks/s
    • bi : 초당 블록 디바이스로 보내는 블록의 수
    • bo : 초당 블록 디바이스로부터 받는 블록의 수

여기서 말하는 '블록 디바이스'란, 하드디스크, CD, DVD 등 블록이나 섹터 등의 단위로 데이터를 전송하는 장치를 의미함.
(블록 디바이스와는 다르게, byte 단위로 데이터를 전송하는 장치를 캐릭터 디바이스라고 함)

즉 bi,bo 는 disk IO 를 의미한다고 보면 됨

 

  • system : system call 및 interrupt 정보
    • in : 초당 interrupt 되는 양. time clock 과 ethernet 의 패킷도 포함되기 때문에
          interrupt 수가 이상하게 많다면 네트워크 쪽을 점검해볼 필요가 있다고 함.
    • sy : system call. 초당 OS 의 시스템 영역에서 수행하는 system call 의 개수
          process 가 OS 의 도움을 받아야 하는 작업(file IO 등)을 수행할 때 sy 의 수가 늘어날 것임
    • cs : context switch. 초당 CPU 내에서 Process 간 Context 정보를 교체하는 횟수
          CPU 를 사용하는 process 가 많을수록 cs 의 값이 증가할 것임
          process 간 CPU 를 차지하기 위한 경쟁치.. 로 생각해도 될 듯.

위에서 설명하는 sy, cs 가 OS 의 bottleneck 을 의미하는 명확한 값은 아님

 

  • cpu : cpu 사용률
    • us : user CPU. 사용자 영역에서 사용하는 CPU 비율
    • sy : system CPU. system call 에 의해 사용되는 CPU 비율
    • id : idle CPU. 사용가능한 CPU 비율. 일반적으로 100-(us+sy)=id 로 계산된다고 함
          이 값이 높을수록 CPU 가 놀고 있다고(....) 보면 됨
    • wa : wait IO. IO 등의 작업으로 인해 대기중인 CPU 비율
    • st : stolen time. hypervisor 가 가상 CPU 를 서비스하는 동안 실제 CPU 를 차지하는 시간

CPU 점유율이 높다고 할 때 us 의 비율이 높은지, sy 의 비율이 높은지 vmstat 으로 확인할 수 있다.

us 의 비율이 높은 이유는 일반적인 OS 명령어를 통해 알기 어렵지만,

sy 의 비율이 높은 이유는 truss 명령을 통해 알 수 있다고.

turss 명령을 통해 어떤 system call 이 수행중인지 확인 가능하다고 함.

 

vmstat의 명령어 가장 첫번째 줄은 이전의 vmstat 명령어로 수집된 정도에 대한 평균치를 나타냄.

즉, 현재의 정보가 아닌 이전에 누적된 정보임

따라서 현재 정보를 봐야 한다면 두번째 줄부터 보면 됨!

 

vmstat -s 옵션을 주어 시스템 부팅 이후 얼마나 많은 system events 가 발생했는지 볼 수 있다.

 

vmstat 1 10 처럼 뒤에 있는 숫자는 "1초마다 갱신되는 정보를 총 10번 보여주세요" 라는 의미임

만약 vmstat 2 라고 하면 2초마다 정보를 영원히 갱신하며 보여줌

vmstat 3 7 이라고 하면 3초마다 갱신되는 정보를 7번 보여줌

 

 

 

참고

waspro.tistory.com/155

mkil.tistory.com/402

buffer cache 설명 tldp.org/LDP/sag/html/buffer-cache.html

blog.naver.com/mybrainz/150099033294

mrrootable.tistory.com/38

 

 

 

 

 

 

 

4. mpstat -P ALL 1

 

mpstat 은 per-processor statistics 의 약어이다.

앞에 m은 multi-processor, multiple-processors, microprocessor, machine, monitor..

이 중 하나의 의미인 것 같으나 뭔지는 모르겠음. [관련 설명 링크]

 

mpstat 은 사용 가능한 CPU 와 Core 의 사용률을 나타낸다.

별다른 옵션 없이 mpstat 만 적용하면 전체 CPU 에 대한 사용률 통계치가 나온다.

mpstat -P 0 옵션을 넣으면 0번 (첫번째) CPU 에 대한 사용률 통계치가 나온다.

mpstat -P 1 옵션을 넣으면 1번 (두번째) CPU 에 대한 사용률 통계치가 나온다.

mpstat -P ALL 옵션을 넣으면 모든 CPU 에 대한 사용률 통계치가 나온다.

mpstat -P ALL 1 옵션을 넣으면 모든 CPU 에 대한 사용률 통계치가 1초마다 갱신되며 나온다.

mpstat 1 5 옵션을 넣으면 모든 CPU 에 대한 사용률 통계치가 1초마다 갱신되며 나오는데 총 5번 갱신한다.

mpstat 으로 나타나는 아래 정보들은 특정 CPU 사용 시간에 대한 백분률을 보여준다.

 

  • 20시 23분 58초 : mpstat 을 수행한 시간
  • CPU : CPU 번호. ALL, 1, 2, 3,, 등으로 나타난다.
  • %usr : user level(application) process 를 구동하는데 사용된 CPU 사용률
  • %nice : nice 우선순위가 적용된 user level(application) process 를 구동하는데 사용된 CPU 사용률
        NI 값(nice 값)이 1~19 사이인 user process 에 의해 사용되는 CPU 사용률
  • %sys : system level(kernel) process 를 구동하는데 사용된 CPU 사용률
  • %iowait : IO 처리를 위해 기다리는 CPU 대기율(IO wait 동안의 CPU 대기율)
  • %irq : Hardware interrupt 를 처리하기 위해 사용된 CPU 사용률
  • %soft : Software interrupt 를 처리하기 위해 사용된 CPU 사용률
  • %steal : 하이퍼바이저가 다른 가상 프로세서를 서비스하는 동안 vCPU 가 실제 CPU를 기다리는 시간의 백분율
        VM(Virtual Machine) 등에서 동작하는 CPU 가 물리 머신으로부터 CPU 자원을 할당받기 위해
        얼마나 대기하고 있는지 알 수 있음
  • %guest : 하이퍼바이저 등에서 가상머신을 구동하는 경우,
        이 가상 머신의 vCPU(virtual CPU) 를 구동하는데 사용된 CPU 사용률
        이 때 가상머신은 nice 값이 적용되지 않은 가상 머신을 의미함
  • %gnice : 하이퍼바이저 등에서 가상머신을 구동하는 경우,
        이 가상 머신의 vCPU(virtual CPU) 를 구동하는데 사용된 CPU 사용률
        이 때 가상머신은 nice 값이 적용된 가상 머신을 의미함
  • %idle : CPU 가 유휴상태로 보내는 시간의 백분률. 즉 놀고 있는 CPU 백분률

위에서 말하는 'nice 우선순위' 라는 것은 CPU 스케줄링 우선순위를 의미함

nice 우선순위는 +19 ~ -20 의 숫자값을 갖는데, 숫자가 낮을수록 우선 순위가 높음.

nice 명령어로 프로세스 우선순위를 부여할 수 있고, renice 명령어로 우선 순위를 재조정할 수 있음

이 때 super user 권한이 필요함.

자세한 내용은 여기 참고

 

mpstat 명령어를 통해 전체 cpu 가 얼마나 일하고 있는지 알 수 있다.

하나의 cpu 만 동작하고 있다면, CPU 를 사용하는 application 이 single thread 로 동작한다는 뜻이 된다.

 

참고

www.whatap.io/ko/blog/25/

linoxide.com/linux-command/linux-mpstat-command/

ssup2.github.io/command_tool/mpstat/

interp.blog/entry/프로세서의-우선순위-값-nice

chloro.tistory.com/106

 

 

 

 

 

 

 

5. pidstat 1 10

 

pidstat 은 process 의 UID, PID, 그리고 CPU 사용률을 보여준다.

Command 부분에서 프로세스의 이름을 알 수 있고, 해당 프로세스가 얼마만큼의 CPU 를 사용하고 있는지 알 수 있다.

top 명령어와 수행하는 것이 비슷하지만, top 처럼 전체 스크린을 띄우지 않고 그때 그때 출력을 해준다.

pidstat 으로 출력되는 내부 정보는 바로 위에 mpstat 부분을 참고

 

pidstat 1 10 처럼 뒤에 있는 숫자는 "1초마다 갱신되는 정보를 총 10번 보여주세요" 라는 의미임

만약 pidstat 2 라고 하면 2초마다 정보를 영원히 갱신하며 보여줌

pidstat 3 7 이라고 하면 3초마다 갱신되는 정보를 7번 보여줌

 

 

 

 

 

6. iostat 1 10

 

avg-cpu : CPU 정보를 보여줌

내용은 위에 4. mpstat 부분 참고

 

tps : 디스크 장치에서 초당 처리한 입출력 작업 개수

kB_read/s : 디스크 장치에서 초당 읽은 데이터 블록 수

kB_wrtn/s : 디스크 장치에서 초당 쓴 데이터 블록

kB_dscd/s : 디스크 장치에서 초당 삭제한 데이터 블록

kB_read : 디스크 장치에서 읽은 데이터 블록

kB_wrtn : 디스크 장치에서 쓴 데이터 블록

kB_dscd/s : 디스크 장치에서 삭제한 데이터 블록

r/s : 초당 완료된 read 요청 수

w/s : 초당 완료된 write 요청 수

 

r/s, w/s 등을 통해 어떤 요청이 들어오는지 보자.

과도한 요청에 의해 성능 문제가 생기는 경우가 있다고 함.

 

아래와 같은 옵션을 줄 수 있다.

 

iostat -c : cpu 정보를 출력
iostat -d : 디스크 장치의 입출력 정보를 출력
iostat -p  /dev/장치명 : 지정된 디스크 장치의 정보를 출력
iostat -t : 결과값 앞에 시간을 포함하여 출력
iostat -n : NFS의 사용량을 출력 단, 커널 2.6.16이상부터 사용가능
iostat -k : 초당 블럭 수 대신 초당 Kb로 출력 단, 커널 2.6.16이상부터 사용가능
iostat -m : 초당 블럭 수 대신 초당 Mb로 출력 단, 커널 2.6.16이상부터 사용가능
iostat -x : 보다 확장된 통계 정보를 출력 -n과 -p옵션과 중복사용이 불가능함
iostat [숫자] : 숫자에 해당하는 초 만큼 출력값을 갱신

 

iostat 1 10 처럼 뒤에 있는 숫자는 "1초마다 갱신되는 정보를 총 10번 보여주세요" 라는 의미임

만약 iostat 2 라고 하면 2초마다 정보를 영원히 갱신하며 보여줌

iostat 3 7 이라고 하면 3초마다 갱신되는 정보를 7번 보여줌

 

참고

brunch.co.kr/@lars/7

idchowto.com/?p=10094

docs.oracle.com/cd/E24846_01/html/E23088/spmonitor-4.html

-x 옵션으로 나타나는 확장된 통계 정보 설명 m.blog.naver.com/bumsukoh/221022044759

 

 

 

 

 

 

7. free -hw

 

free 명령어는 시스템에서 사용중인 메모리 및 유휴 메모리의 정보를 보여준다.

 

  • total
    • Mem total : 시스템에 설치된 전체 메모리 크기
    • Swap total : 설정된 swap 영역 크기
  • used
    • Mem used : 현재 사용중인 메모리 크기. total 에서 free, buff, cache 를 뺀 크기
    • Swap used : 현재 사용중인 swap 영역 크기
          이 크기가 계속 늘어난다면 메모리가 계속 부족하다는 의미이므로, 시스템 점검을 해봐야 함.
  • free
    • Mem free : 현재 유휴 메모리 크기. total 에서 used, buff, cache 를 뺀 크기
    • Swap free : 사용되지 않는 swap 영역 크기
  • shared : 여러 프로세스에서 사용할 수 있는 공유 메모리 크기. 프로세스 혹은 threads 간 통신에 사용됨
        tmpfs(메모리 파일 시스템), ramfs 등으로 사용되는 공간
  • buffers : 버퍼로 사용중인 메모리 크기
  • cache : cache (그리고 slab) 로 사용중인 메모리 크기
  • buff/cache : buffers 와 cache 의 합
  • available : swapping 없이 새로운 프로세스에게 할당 가능한 메모리의 예상 크기

 

free 뒤에 붙을 수 있는 옵션에 대해 설명한다.

 

  • [-h] : 사람이 읽기 쉬운 단위로 출력한다.
  • [-b | -k | -m | -g] : 바이트, 키비바이트, 메비바이트, 기비바이트 단위로 출력한다.
  • [--tebi | --pebi] : 테비바이트, 페비바이트 단위로 출력한다.
  • [--kilo | --mega | --giga | --tera | --peta] : 킬로바이트, 메가바이트, 기기바이트, 페타바이트 단위로 출력한다.
  • [-w] : 와이드 모드로 cache와 buffers를 따로 출력한다.
  • [-c '반복'] : 지정한 반복 횟수 만큼 free를 연속해서 실행한다.
  • [-s '초'] : 지정한 초 만큼 딜레이를 두고 지속적으로 실행한다.
  • [-t] : 합계(Memory + Swap)가 계산된 total 을 추가로 출력한다.

 

리눅스는 항상 여유 메모리 공간(유휴 공간)을 Buffer와 Cache로 사용한다고 함.

따라서 cache 메모리도 유휴 메모리(여유 메모리)로 보아야 함.

메모리에 데이터를 저장(caching)해서 느린 디스크 IO 를 최대한 줄여 성능 향상을 하기 위함

Buffer는 디바이스 블록에 대한 메타데이터들을 메모리에 저장하는 곳임

블록 디바이스로부터 데이터를 읽어오기 위해 필요한 정보들을 메모리에 저장함.

Cache는 페이지 캐시와 slab으로 사용중인 메모리 공간임

 

페이지 캐시는 간단히 말해, 한 번 디스크에서 읽은 데이터를 메모리에 저장(caching)하고,

다음에 똑같은 데이터를 다시 읽을 때 디스크로 요청 대신 cache 에서 바로 읽어 성능을 향상시킴.

페이지 단위로 관리하기 때문에 페이지 캐시라고 함.


slab은 커널에서 관리하는 커널 오브젝트를 저장하는 단위임

커널은 어플리케이션 할당 단위(페이지)보다 작은 단위인 slab 단위로 메모리를 사용한다고 함.

하나의 메모리 페이지에 여러 slab들이 존재할 수 있음.
slab에 파일의 inode 이나 dentry 정보(파일의 자료구조를 나타내는 정보)들을 캐싱 가능하다고 함.

 

추가 정보는 여기 링크 참고

 

 

 

 

참고 

brunch.co.kr/@dreaminz/2

www.whatap.io/ko/blog/37/

zetawiki.com/wiki/리눅스_명목메모리사용률,_실질메모리사용률

https://www.linuxatemyram.com/ 

 

 

 

 

8. sar -n DEV 1

 

sar 은 System Activity Report 의 약어이다.

sar 명령어는 현재 리눅스 시스템의 cpu, memory, network, disk IO 등의 지표 정보를 수집하고 보여준다.

시스템의 다양한 활동을 모니터링 할 수 있는 명령어임.

 

sar -n DEV 명령어는 네트워크 장치의 통계치를 보여준다.

rx 는 received (inbound traffic), 즉 전송받음(수신) 을 의미하고

tx 는 transmitted (outbound traffic), 즉 전송보냄(송신) 을 의미한다.

 

  • IFACE : Network Interface 이름
  • rxpck/s : 초당 전송받은 패킷수
  • txpck/s : 초당 전송보낸 패킷수
  • rxbyt/s : 초당 전송받은 bytes 크기
  • txbyt/s : 초당 전송보낸 bytes 크기
  • rxcmp/s : 압축된 패킷을 초당 전송받은 수
  • txcmp/s : 압축된 패킷을 초당 전송보낸 수
  • rxmcst/s : 초당 전송받은 다중 패킷 (multicast) 수
  • %ifutil : NIC 에서 사용 가능한 network 대역폭의 지표 0% = idle, 100 % = 최대치 (1G NIC 의 경우 1G 사용시)...
       뭔 말인지 모르겠음

 

 

참고

sar 에 대한 자세한 설명

brunch.co.kr/@lars/9

blog.naver.com/luckan7/10037958551

 

여태까지 명령어 중 제일 광범위한 정보를 포함하고 있어서, 내 입장에서 제일 사용하기 어려울 것 같음...

 

 

 

 

 

 

9. top

 

top 명령어는 리눅스 시스템의 전반적인 상황을 모니터링하는 툴이다.

더불어 프로세스 관리도 할 수 있다.

top 화면 상단의 1 user, 2 user,,, 는 현재 시스템에 접속해있는 사용자 수를 의미한다.

top 화면 상단의 load average 는 평균 부하율을 의미함. 위에 1.uptime 의 설명 참고.

 

  • PID : 프로세스 ID (PID) 각 프로세스마다 고유한 PID 를 갖는다.
  • USER : 프로세스를 실행시킨 사용자 ID
  • PR : 프로세스의 우선순위 (priority)
  • NI : NICE 값. 일의 nice value값이다. nice value 가 적을수록 우선순위가 높음.
  • VIRT : process 가 사용중인 가상 메모리(Virtual Memory) 크기. SWAP+RES. 단위는 KiB
  • RES : process 가 사용중인 물리 메모리 크기(Resident Size). 단위는 KiB
  • SHR : 다른 process 들과 공유하는 공유 메모리(Shared Memory)의 크기. 단위는 KiB
  • S : 프로세스의 상태 [ S(sleeping), R(running), W(swapped out process), Z(zombies), I(idle) ]
  • %CPU : 프로세스가 사용하는 CPU의 사용율
  • %MEM : 프로세스가 사용하는 메모리의 사용율
  • TIME+ : 프로세스 시작된 이후 경과된 총 시간
  • COMMAND : 실행된 명령어

 

 

아래 단축키를 사용하여 여러 기능을 수행할 수 있다.

  • shift + t : 실행된 시간이 큰 순서로 정렬
  • shift + m : 메모리 사용량이 큰 순서로 정렬
  • shift + p : cpu 사용량이 큰 순서로 정렬
  • k : Process 종료
    • k 입력 후 종료할 PID를 입력
    • signal을 입력하라 표시되면 9를 넣어줌
    • 'kill -9 PID' 명령어와 같음!
  • c  : 명령 인자 표시 / 비표시
  • l(소문자엘)  : uptime line(첫번째 행)을 표시 / 비표시
  • space bar : Refresh
  • u : 입력한 유저 소유의 Process만 표시
    • which user : 와 같이 유저를 입력하라 표시될때 User를 입력
    • blank(공백) 입력시 모두 표시
  • shift + b : 상단의 uptime 및 기타 정보값을 블락선택해 표시
  • f  : 화면에 표시될 프로세스 관련 항목 설정
  • i : idle 또는 좀비 상태의 프로세스는 표시 되지 않음
  • z : 출력 색상 변경
  • d [sec] : 설정된 초단위로 Refresh
  • c  : command뒤에 인자값 표시
  • q : 명령어 종료
  • 1 : CPU core 별로 cpu 정보를 표시

화면이 주기적으로 갱신되어 보기 힘든 경우도 있는데, 멈추려면 아래 단축키를 사용한다.

Ctrl+S 는 업데이트를 중지하고, Ctrl+Q 는 업데이트를 다시 시작한다.

 

top -p [PID] 명령어를 통해, 내가 원하는 PID 하나의 정보만 볼 수 있다.

 

 

top 명령어보다 보기 쉬운 htop 을 사용하는 것이 정신건강에 이로울 것 같다.

 

 

 

 

참고 

www.cubrid.com/tutorial/3794195

zzsza.github.io/development/2018/07/18/linux-top/

 

 

 

 

 

추가)

 

ps 명령어 결과를 정렬하여 볼 수 있다.

cpu 를 많이 사용하는 순으로 정렬하여 보는 방법은 아래와 같다.

ps aux --sort -%cpu | head -n 6
ps -eo comm,pcpu --sort -pcpu | head -5

 

memory 를 많이 사용하는 순으로 정렬하여 보는 방법은 아래와 같다.

ps aux --sort -%mem | head -n 6
ps -eo comm,pmem --sort -pmem | head -5

 

참고

https://www.networkworld.com/article/3596800/how-to-sort-ps-output.html

 

 

 

+ Recent posts