프로세스 정보 확인 방법

EnoSoup·2021년 7월 26일
0

Linux

목록 보기
10/15
post-thumbnail

리눅스 프로세스 정보 확인 방법

1. top을 통해 프로세스 확인하기
$ top -b -n 1
top - 20:54:47 up 77 days, 10:58,  1 user,  load average: 0.03, 0.01, 0.00
Tasks:   4 total,   1 running,   3 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   980016 total,   420180 free,   160156 used,   399680 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   642224 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
31589 ec2-user  20   0  124844   3896   2860 S   0.0  0.4   0:00.02 bash
31630 ec2-user  20   0  124844   2448   1408 S   0.0  0.2   0:00.00 bash
31633 ec2-user  20   0  157340   2200   1932 S   0.0  0.2   0:00.00 logger
31637 ec2-user  20   0  170740   4216   3740 R   0.0  0.4   0:00.00 top

# up 77 days : 현재 서버의 시간, 얼마나 구동되었는지 나와있다.
# load average : load average는 현재 시스템이 얼마나 많은일을 하는지 보여주는 데이터
# Tasks : 현재 시스템에 구동 중인 프로세스의 개수를 나타낸다.
# %Cpu(s), Mem, Swap : 각각 CPU, Mem, Swap 메모리의 사용량을 나타낸다.
# PR : 다른 프로세스들보다 더 먼저 실행되어야 하는지의 여부
# NI : PR을 얼마만큰 조절할 것인지를 결정
# VIRT, RES, SHR : 프로세스가 사용하는 메모리의 양이 얼마인지를 확인할 수 있는 정보
#                  이를 통해 프로세스에 메모리 누수가 있는지 확인할 수 있다.
# S : 프로세스의 상태, CPU를 사용하면서 작업하는 상태인지, I/O를 기다리는 상태인지, 아니면
#     아무 작업도 하지 않는 유휴 상태인지를 나타낸다.

2. VIRT, SER, SHR 확인
# 이 세가지 항목은 현재 프로세스가 사용하고 있는 메모리와 관련된 값이다.
# VIRT : task가 사용하고 있는 virtual memory의 전체용량
# RES : 현재 task가 사용하고 있는 물리 메모리의 양
# SHR : 다른 프로세스와 공유하고 있는 shared memory의 양

# 라이브러리가 SHR 영역에 포함될 수 있다. VIRT는 실제로 할당되지 않은 가상 공간이기 때문에
# 해당 값이 크다고 해도 문제가 되지 않으며, 실제 사용하고 있는 RES 영역이 높은 프로세스를 찾아야 한다.

# VIRT로 표현되는 가상메모리는 프로세스가 커널로부터 사용을 예약받은 메모리라 생각할 수 있다.
# Memory commit : 프로세스가 커널에게 1GB 메모리 요청, 커널은 요청 프로세스에게 메모리 주소 전달
#                 이 방식은 물리 메모리에 해당영역이 할당된 상태는 아니라는 점
#                 할당받은 후 프로세스가 실제 메모리 영역에 쓰기작업을 하면 Page fault가 발생하며
#                 그때부터 물리 메모리에 프로세스의 가상 메모리 공간을 매핑한다. 물리 메모리에 바인딩된 영역이 RES로 계산된다.                 
# Memory commit 설정관련 파라미터 : vm.overcommit_memory
#                               이 값은 0, 1, 2 세가지로 세팅이 가능
# 0 : default 값, page cache + swap + slab reclaimable 값을 합한 값이 overcommit 최대값
# 1 :무조건 commit 진행, 요청 온 모든 메모리에 대해 commit 발생, 이렇게 되면 가용 메모리보다 훨씬
#    큰 메모리를 요청하는 일이 발생할 수 있다.
# 2 : 제한적으로 commit 진행, 값이 0일때와 계산식이 같으며, vm.overcommit_ratio에 설정된 비율과 swap 영역의
#     크기를 토대로 계산된다.
# vm.overcommit_memory 파라미터를 이용해서 커널의 메모리 커밋 동작방식을 제어할 수 있으며, 프로세스에 할당되는 VIRT 메모리 양도 제어가능

3. S항목에 기재된 프로세스 상태보기
# D : 디스크 혹은 네트워크 I/O를 대기하고 있는 프로세스
# R : 실행 중인 프로세스를 의미, 실제로 CPU 자원을 소모하고 있는 프로세스
# S : Sleeping 상태의 프로세스, 요청한 리소스를 즉시 사용할 수 있는 프로세스
# T : strace 등으로 프로세스의 시스템 콜을 추적하고 있는 상태를 보여준다
# Z : zombie 상태의 프로세스, 부모 프로세스가 죽은 자식 프로세스를 의미한다

# D 상태의 프로세스가 많으면 대기중인 프로세스들이 R 상태로 다시 돌아가야 하기 때문에
# 시스템의 부하를 계산하는데 포함된다.

3.1 생성 가능한 최대 PID 확인
$ sysctl -a | grep -i pid_max
kernel.pid_max = 32768
# 이 시스템에서 생성되는 프로세스가 가질 수 있는 PID 최대값은 32768 이다.
# 값은 65536 까지 설정이 가능하다.
profile
Cloud Engineer@Plateer. 클라우드 상에서 엔지니어링을 재미있게 하는 엔지니어입니다.

0개의 댓글