전자제품을 구매하고 언박싱을 하면 매번 튀어나오는 매뉴얼...
하지만, 우리는 보통 그 매뉴얼을 거들떠 보지도 않는다. 어!? 나만 그런가!? ^^
리눅스 서버를 구성하고 종종 확인하는 리소스...
솔직히... 그 의미가 어떤 것인지 경험으로만 파악했지, 정확한 의미는 잘 모른다. 어?! 나만 그런가?! ^^
[ Environment ]
- VM : VirtualBox v7.0.6 r155176
- OS : Ubuntu 20.04 LTS
[ top ]
내 서버가 왠지 힘들어하는 것 같으면 가장 먼저 확인하는 것이 'top' 명령어이다.
여기에서 주로 보는 것은 다음의 'load average' 영역일 것이다.
'load average'는 시스템의 부하정도를 알려주는 지표인데,
실행중인 프로세스 또는 Disk I/O 등을 위해 대기하고 있는 프로세스의 정도를 알려주는 정보로써
CPU core 1개당 1 이상의 값을 갖는다면 대기해야하는 task가 있다는 의미로 이해하면 된다.
그런데, 왜 3개의 값이 보일까?!
1분 / 5분 / 15분 순서로 값을 보여주는데, 이를 통해 부하가 심해지고 있는지 해소되고 있는지 경향을 볼 수 있다.
개인 PC라면 가성비로 사용해야하기에 1에 맞춰서 Spec을 확보해도 괜찮겠지만
서비스를 위한 서버라면 아무리 돈이 없어도 평균 0.5 이하로 맞춰야 그나마 성능 저하 없이 사용할 수 있다.
일단 여기까지만 알아도 충분하지 않을까!? ^^
[ core ]
우리가 요즘 사용하는 CPU는 거의 multi-core일 것이다.
어!? 그런데, 생각해보니 Kubernetes에서 POD의 core를 소숫점으로도 줄 수 있는데... 일단 지금은 무시!!! ^^
실습을 하고 있는 환경은 일단 VirtualBox에서 2 core를 할당했다.
정말 잘 되어있는지 확인해보자.
스크린샷을 다 찍기에는 너무 길어져서 잘랐는데.... 그냥 심플하게 확인하려면 다음과 같이 하면 된다.
2 core가 잘 할당되어 있는 것을 볼 수 있다.
다른 명령어로도 확인할 수 있다.
[ full-load CPU ]
CPU 관련한 부하가 한계치까지 가면 어떻게 되는지 시뮬레이션을 해보자.
> nano cpu.py |
#!/usr/bin/python test = 0 while True: test = test + 1 |
Terminal 탭을 2개를 열고 진행을 해보자.
응?! 그런데, 2 core 인데...
CPU 100%라고 하면, load 값이 2가 되어야 할 것 같은데 ... 1 값으로 수렴하고 있는 것 처럼 보인다.
그 이유는!
지금 실행되고 있는 python은 core 1개에서 실행되고 있기 때문이다!
그러면... python을 하나 더 실행해보자.
그리고나서 top을 다시 한 번 확인해보면,
2 core이기 때문에, 각각 100% 실행이 되고 있으니... 2 값으로 나온다.
어!? 그러면 하나 더 실행하면!?
밑에 보이는 리스트 형식의 내역을 보면 CPU는 총 200%를 3으로 나눠서 사용하고 있는 것이 보일 것이다.
'load average' 값은 3값으로 수렴하고 있다.
[ uptime]
'top' 명령어 말고 다른 명령어도 알아보자.
지속적으로 값을 보여주는 것이 아니라 1회성으로 뿌려주고 끝난다.
[ /proc/loadavg ]
또 다른 방법으로도 확인해볼 수 있다.
[ w ]
top 명령어와 uptime 명령어의 중간쯤에 위치하고 있는 것 같은 'w' 명령어도 있다.
그런데, 'load average'를 발생시키는 요인이 CPU 사용만 있을까!?
답은.... 당연히... 아니다 !!!
[ full-load Disk I/O ]
디스크에 읽고 쓰는 것도 부하를 야기한다.
> nano io.py |
#!/usr/bin/python while True: f = open("./test.txt", 'w') f.write("TEST") f.close() |
CPU 사용량은 9%를 찍고 있지만 'load average'를 보면 1에 수렴하고 있다.
CPU 100%를 찍으면 어떻게 될까?
'load average'를 보면 2에 수렴하고 있지만 CPU 사용량을 보면 차이가 있다.
그렇다.
'load average'는 단순하게 Running 중인 프로세스 뿐만 아니라 Disk I/O로 인해 대기타는 것도 같이 바라보고 있다.
그러면, 이렇게 부하가 잡히고 있을 때 분석은 어떻게 하면 될까!?
일단은 뭐, top으로 확인 가능한 아래 리스트 목록으로 추적이 가능하다.
하지만, CPU 부하가 문제인지 Disk I/O 대기가 문제인지 어떻게 알 수 있을까?
[ vmstat ]
어떤 상태인지 'vmstat' 명령어를 사용해보자.
'vmstat' 명령어는 일단 Virtual Memory Statistics의 약자로써 현재 CPU 및 Memory 사용량을 알 수 있다.
지금 여기에서 살펴볼 것은 앞 부분에 있는 "r"과 "b" 부분이다.
"r"은 현재 실행하려고 하거나 실행 중인 프로세스의 개수를 알려주는 것이고
"b"는 uninterruptible sleep 상태의 프로세스 개수, 즉 I/O 대기를 하고 있는 프로세스의 개수를 알려준다.
중간에 io.py의 실행을 종료하면 어떻게 나오는지를 살펴보자.
중간에 보면 "b" 부분이 0으로 바뀌는 것을 확인할 수 있다.
우리 서버가 지금 힘들어하지는 않는지
머리(CPU)가 아픈지 손(I/O)이 바쁜지 파악해서 해결해주도록 하자.
'OS > Ubuntu' 카테고리의 다른 글
Job Scheduler - cron, crontab (0) | 2024.08.11 |
---|---|
더미 파일 만들기 (fallocate, truncate) (0) | 2023.06.28 |
Ubuntu Server 22.04 LTS 설치 (0) | 2023.04.15 |
리눅스 원격데스크탑 (ubuntu 18.04 - vino) (2) | 2022.03.20 |
Ubuntu ~ Windows 파일 공유를 위한 SAMBA 설치 (0) | 2022.02.09 |