일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- kv
- 유닉스
- 앤서블
- key/value
- 커널 파라미터
- SHR
- 전체 백업
- 리눅스
- REST API
- backend storage
- 인프라
- 구성관리
- Vault
- auth methods
- 시스템
- 파일시스템
- 차분 백업
- IAC
- 백업
- hashicorp
- vault agent
- devops
- 자동화
- Secret Engine
- DATA 백업
- VIRT
- SSH OTP
- secret engines
- 통합 풀 백업
- Role
- Today
- Total
클라우드 아카이브
[Linux] 리눅스 time, uptime을 활용한 Load Average 확인 및 활용 본문
[Linux] 리눅스 time, uptime을 활용한 Load Average 확인 및 활용
Cloud Engineer 2022. 3. 19. 16:561. 배경
리눅스 시스템에서 1분, 5분, 15분 단위로 평균 부하를 파악하고 관련 정보를 활용하여 장애 발생 전 조치를 취해야됩니다. 이 때 평균 부하 즉 Load Average를 확인하기 위해 사용되는 명령어가 uptime 명령어이며, 특정 프로그램 혹은 명령어(사실 ls 등의 명령어도 일종의 프로그램입니다.)의 실행시간 등을 파악할 때 time 명령어가 사용됩니다. 본 포스팅에서는 time, uptime 명령어에 대해 각각 알아보고 해당 결과값 데이터를 통해 확인할 수 있는 내용과 활용 방안에 대해 소개하겠습니다.
2. time 명령어 : 특정 프로그램의 실행 시간을 확인
my-binary라는 프로그램을 실행시킨 직후부터 완료되기까지 실제 소요되는 시간을 확인하기 위해서는 time 명령어를 사용합니다. 리눅스 서버에서 실제 time 명령어를 통해 확인해보겠습니다.
$ time ./my-binary
real 30m00.02s
user 15m35.32s
sys 20m03.29s
위의 결과값을 통해 저희가 알아낼 수 있는 정보에 대해 알아보겠습니다.
2.1. - 명령어 실행 시간을 다각화 : real time, user time, sys time
- real : 특정 프로그램을 실행 후 완료되기까지 실제 소요되는 시간
- real = 프로그램 종료 시간 - 프로그램 실행 시간
- gettimeofday() 시스템 콜을 사용하여 소요 시간을 리턴
- user : 유저 영역에서 프로그램이 실행된 시간
- sys : 커널 영역에서 프로그램이 실행된 시간
- 메모리 할당 및 하드웨어 접근 등의 작업 수행 시간 측정
- 커널 처리 명령어 예시: 메모리 동적 할당(malloc) 호출 시 실제 메모리에서 수행되는 시간, 파일 I/O (fread, fwrite) 등
2.2. - CPU 코어 개수를 확인할 수 있다?
나아가, real, user, sys의 정보를 활용하여 서버에서 구동 중인 CPU 코어 개수를 파악할 수도 있는데요. 일반적으로 자주 혼동하는 부분이real time = user time + sys time이라고 생각하는 것입니다. 하지만, 위의 사례에서 볼 수 있듯이 real time < user time + sys time이 될 수 있습니다. 이러한 현상이 발생할 수 있는 이유는 여러 개의 CPU 코어를 활용하여 프로그램을 실행하기 때문입니다. 즉 다중 프로세서 시스템에서 프로세스 또는 쓰레드가 병렬로 실행될 수 있으므로 전체 CPU 시간보다 경과 시간이 더 짧을 수 있습니다. 따라서 위의 데이터를 통해 sys time + user time =< real time * CPU 개수라는 일반화된 공식을 만들 수 있습니다.
3. uptime : 서버의 전체적인 CPU 부하율을 확인
리눅스 서버에서 uptime 명령어를 실행시키면 아래와 같은 결과를 리턴합니다.
$ uptime
# 현재 시간 # 가동시간 # 로그인 중인 사용자 수 평균 부하율 : 1분 5분 15분
13:39 up 6 mins, 2 users, load averages: 3.22 5.56 2.95
즉, uptime 명령어를 통해 아래와 같은 정보를 확인할 수 있습니다.
- 현재 시간 : 13시 39분
- 시스템 부팅 후 구동 시간 : 6분
- 시스템에 로그인 중인 사용자 수 (/var/run/utmp에서 데이터 참조) : 로그인 유저는 2명
- 1, 5, 15분 동안의 시스템 평균 CPU 부하율 : 1분 동안 3.22, 5분 동안 5.56, 15분 동안 2.95
3.1. - CPU 코어 수에 따라 해석이 달라지는 Load Average
서버가 소유한 CPU 코어 개수에 따라 Load Average의 결과값 수치가 같더라도 서버 상태 해석이 달라질 수 있습니다. 같은 수치에 대해 서로 다른 서버가 가지고 있는 코어 개수가 다음과 같다고 가정하겠습니다.
3.1.1. - 싱글 코어 (CPU 코어 1개)
- 1.0 : CPU가 100% 사용 중
- 2.0 : CPU가 100% 사용 중, 처리할 전체 프로세스의 50%는 처리 중이며, 나머지 50%는 대기 중
- 4.0 : CPU가 100% 사용 중, 처리할 전체 프로세스의 25%는 처리 중이며, 나머지 75%는 대기 중
3.1.2. - 듀얼 코어 (CPU 코어 2개)
- 1.0 : CPU가 50% 사용 중
- 2.0 : CPU가 100% 사용 중
- 4.0 : CPU가 100% 사용 중, 처리할 전체 프로세스의 50%는 처리 중이며, 나머지 50%는 대기 중
Load Average에서 나타내는 데이터는 부하율을 의미하기 때문입니다. CPU 사용률을 통해 다음과 같은 현상을 파악할 수 있습니다.
3.2. - CPU 사용률 : 미래에 일어날 수 있는 장애를 사전에 차단할 수 있는 핵심 지표
3.2.1. - CPU 사용률이 70% 초과
- 문제: 아직은 서버 상태에 문제가 없으나 문제점을 파악하면 좋은 시점입니다.
- 조치 방안
- CPU 증설
- CPU 점유율이 높지만 중요하지 않는 프로세스 종료 ex) notepad, Chrome 등
- 서버 재부팅
- etc.
3.2.2. - CPU 사용률이 100% 빈번하게 찍음
- 문제: 서버 상태가 응급사항이며, 빠른 시일 내에 다음과 같은 조치를 취해야합니다.
- 조치 방안
- CPU 증설
- CPU 점유율이 높지만 중요하지 않는 프로세스 종료 ex) notepad, chrome 등
- 서버 재부팅
- etc.
3.3. 다양한 Load Average 확인 방법
- /proc/loadavg 파일 (평균 부하율)
- uptime 명령어 (+현재시간 및 구동 시간 + w 명령어 결과)
- w 명령어 (+현재 로그인 중인 사용자 정보)
- top 명령어 (+프로세스 실행 현황 확인)
[출처]
'OS 및 스토리지 > Linux' 카테고리의 다른 글
[프로세스] VIRT, RES, SHR과 Memory Commit (0) | 2022.05.25 |
---|---|
[리눅스] 시스템 구성 정보 확인 (0) | 2022.05.14 |
[SSH] SSH 개념과 통신 방식 및 실습 (0) | 2022.03.19 |
[Linux][RHEL/CentOS 7] Teaming 구성 (0) | 2022.03.06 |
[리눅스] TTY, PTY, PTS 개념과 유래 (0) | 2022.03.05 |