진주성 블로그 방문하기
진주성 블로그 방문하기
OS top을 통해 살펴보는 프로세스 정보들
2020.03.05 01:55
top을 통해 살펴보는 프로세스 정보들
top
- 시스템의 상태를 전반적으로 가장 빠르게 파악 가능(CPU, Memory, Process)
- 옵션 없이 입력하면 interval 간격(기본 3초)으로 화면을 갱신하며 정보를 보여줌
- top 실행 전 옵션
- 순간의 정보를 확인하려면
-b
옵션 추가(batch 모드) -n
: top 실행 주기 설정(반복 횟수)
- 순간의 정보를 확인하려면
- 세부 정보 필드별 항목
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND* PID : 프로세스 ID (PID)* USER : 프로세스를 실행시킨 사용자 ID* PRI : 프로세스의 우선순위 (priority)* NI : NICE 값. 일의 nice value값이다. 마이너스를 가지는 nice value는 우선순위가 높음.* VIRT : 가상 메모리의 사용량(SWAP+RES)* RES : 현재 페이지가 상주하고 있는 크기(Resident Size)* SHR : 분할된 페이지, 프로세스에 의해 사용된 메모리를 나눈 메모리의 총합.* S : 프로세스의 상태 [ S(sleeping), R(running), W(swapped out process), Z(zombies) ]* %CPU : 프로세스가 사용하는 CPU의 사용율* %MEM : 프로세스가 사용하는 메모리의 사용율* TIME+ : 프로세스 시작된 이후 경과된 총 시간* COMMAND : 실행된 명령어* Load average (로드 애버리지) : 세 개의 숫자는 각각 1분, 5분, 15분 간의 평균 실행/대기 중인 프로세스의 수를 나타냄.uptime 명령어로도 확인할 수 있으며, 시스템 부하를 모니터링 할 수 있다. 숫자가 높을 수록 시스템에 부하가 있다는 것이다.load average 값은 CPU의 코어 수를 같이 확인해야 하며, 코어 수 보다 적으면 문제가 없다.
-
- top 실행 후 명령어
- shift + p : CPU 사용률 내림차순
- shit + m : 메모리 사용률 내림차순
- shift + t : 프로세스가 돌아가고 있는 시간 순
- f : sort field 선택 화면 -> q 누르면 RES순으로 정렬
- a : 메모리 사용량에 따라 정렬
- b : Batch 모드로 작동
- 1 : CPU Core별로 사용량 보여줌
- k : Process 종료
-
k 입력 후 종료할 PID를 입력한다signal을 입력하라 표시되면 9를 넣어준다
-
c : 명령 인자 표시 / 비표시
-
l(소 문자엘) : uptime line(첫번째 행)을 표시 / 비표시
-
space bar : Refresh
-
u : 입력한 유저 소유의 Process만 표시
-
o which user : 와 같이 유저를 입력하라 표시될때 User를 입력
-
o blank(공백) 입력시 모두 표시
-
shift + b : 상단의 uptime 및 기타 정보값을 블락선택해 표시
-
i : idle 또는 좀비 상태의 프로세스는 표시 되지 않음
-
z : 출력 색상 변경
-
d [sec] : 설정된 초단위로 Refresh
-
c : command뒤에 인자값 표시
-
q : 명령어 종료
-
- ps와 top의 차이점
- ps는 ps한 시점에 proc에서 검색한 cpu 사용량
- top은 proc에서 일정 주기로 합산해 cpu 사용율 출력
top -b -n 1
- 3:58 : 3시간 58분 전에 서버가 구동
- load average : 현재 시스템이 얼마나 일을 하는지를 나타냄. 3개의 숫자는 1분, 5분, 15분 간의 평균 실행/대기 중인 프로세스의 수. CPU 코어수 보다 적으면 문제 없음
- Tasks : 프로세스 개수
- KiB Mem, Swap : 각 메모리의 사용량
- PR : 실행 우선순위
- VIRT, RES, SHR : 메모리 사용량 => 누수 check 가능
- S : 프로세스 상태(작업중, I/O 대기, 유휴 상태 등)
VIRT, RES, SHR
- 현재 프로세스가 사용하고 있는 메모리
- VIRT
- 프로세스가 사용하고 있는 virtual memory의 전체 용량
- 프로세스에 할당된 가상 메모리 전체
- SWAP + RES
- RES
- 현재 프로세스가 사용하고 있는 물리 메모리의 양
- 실제로 메모리에 올려서 사용하고 있는 물리 메모리
- 실제로 메모리를 쓰고 있는 RES가 핵심!
- SHR
- 다른 프로세스와 공유하고 있는 shared memory의 양
- 예시로 라이브러리를 들 수 있음. 대부분의 리눅스 프로세스는 glibc라는 라이브러리를 참고하기에 이런 라이브러리를 공유 메모리에 올려서 사용
Memory Commit
- 프로세스가 커널에게 필요한 메모리를 요청하면 커널은 프로세스에 메모리 영역을 주고 실제로 할당은 하지 않지만 해당 영역을 프로세스에게 주었다는 것을 저장해둠
- 이런 과정을 Memory commit이라 부름
- 왜 커널은 프로세스의 메모리 요청에 따라 즉시 할당하지 않고 Memory Commit과 같은 기술을 사용해 요청을 지연시킬까?
- fork()와 같은 새로운 프로세스를 만들기 위한 콜을 처리해야 하기 때문
- fork() 시스템 콜을 사용하면 커널은 실행중인 프로세스와 똑같은 프로세스를 하나 더 만들고, exec() 시스템 콜을 통해 다른 프로세스로 변함. 이 때 확보한 메모리가 쓸모 없어질 수 있음
- COW(Copy-On-Write) 기법을 통해 복사된 메모리 영역에 실제 쓰기 작업이 발생한 후 실질적인 메모리 할당을 진행
프로세스 상태
- SHR 옆에 있는 S 항목으로 볼 수 있음
- D : Uninterruptiable sleep. 디스크 혹은 네트워크 I/O를 대기
- R : 실행 중(CPU 자원을 소모)
- S : Sleeping 상태, 요청한 리소스를 즉시 사용 가능
- T : Traced or Stopped. 보통의 시스템에서 자주 볼 수 없는 상태
- Z : zombie. 부모 프로세스가 죽은 자식 프로세스
운영 중 실시간 CPU 사용률 측정하는 방법
* top -b -n2 -p 1 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' -v prefix="$prefix" '{ split($1, vs, ","); v=vs[length(vs)]; sub("%", "", v); printf "%s%.f%n", prefix, 100 - v }'
댓글 0
번호 | 제목 | 날짜 | 조회 수 |
---|---|---|---|
155 | Linux system service bug gives you root on every major distro | 2022.02.05 | 205 |
154 | Red Hat Enterprise Linux technology capabilities and limits | 2021.05.13 | 117 |
153 | weblogic wlst 기반 암호화파일 복호화 (AES) | 2021.04.06 | 225 |
152 | weblogic admin 패스워드 변경 방법 | 2021.04.06 | 137 |
151 | vi, vim ^M 제거 | 2021.04.02 | 94 |
150 | wmic useraccount list brief | 2021.04.01 | 155 |
149 | Jeus7 Getting Start Guide | 2021.03.09 | 107 |
148 | hp-ux glance Memory Sort | 2021.02.26 | 217 |
147 | 외부로 통신이 되지 않을 때 가지고 있는 CD-ROM으로 yum 사용하는 방법 | 2020.08.26 | 792 |
146 | AIX 내부적인 Memory 관리 방법 | 2020.04.15 | 546 |
145 | AIX SYSTEM CHECK SCRIPT | 2020.04.10 | 2510 |
144 | 아파치 톰캣 AJP 프로토콜에 '고스트캣(GhostCat)' 취약점 | 2020.04.06 | 1071 |
» | top을 통해 살펴보는 프로세스 정보들 | 2020.03.05 | 396 |
142 | netstat | 2020.02.05 | 316 |
141 | Linux Cache Memory Clear | 2020.01.20 | 387 |