리눅스 시스템 부하와 Load Average
안녕하세요
오늘은 리눅스 시스템 부하와 Load Average주제로 한번 말씀을 드려 보려고 합니다
리얼리눅스의 송태웅 강사입니다.
시스템 부하 상태 그러니까 시스템이 얼마만큼 좀 오버헤드
그러니까 좀 부하를 많이 받고 있는가 시스템이 굉장히 복잡한 상태이고 이제 바쁜 상태인지
이런 것들을 확인할 때 Load Average 수치를 사용할 수가 있습니다
이 부분들에 대해서 정확하게 이해하지 못하신 분들도 많고 블로그에도 글들이 많아요
하지만 조금 더 정확하게 말씀을 드려보면 여러분들 이해하실 때 그리고 또 문제 해결 하시거나 시스템 운영하실 때 도움이 많이 되실 거라고 생각이 들어서 말씀 좀 드려보도록 하겠습니다
여기 보시게 되면 우리가 top 명령어라든지 Load Average 명령어를 볼 수 있는 게 있어요
여러가지가 있는데요
우선은 첫번째로 볼 수 있는 게 top 입니다
top라 하게 되면 오른쪽 상단에 Load Average 라는 수치가 일단 있구요
그 다음에 여기서 cat / proc / loadavg 수치를 보는 방법이 있습니다
이렇게 대표적인게 두 가지고 uptime 이라든지 이런 방식을 통해서도 확인할 수 있는데요
우선은 Load Average에 대해서 이제 말씀을 좀 드려보는게 좋을 것 같아요
Load Average의 숫자가 세 가지가 있습니다
하나씩 말씀 드려보면 시스템 부하 정도를 나타내는데 이 세 가지 수치로 나타내는 거고 세 가지가 뜻하는 건 사실 똑같습니다 시스템 부하가 어느 정도인지를 얘기를 해주고 있는 거예요
시스템 부하가 0인지 1인지 시스템 부하가 2인지 이런 것들을 설명하고 있는 건데요
이 세가지의 차이점이라고 한다면 이 1,2,3 이런 수치/부하 상태가 1분의 평균이냐 5분의 평균이냐 15분의 평균이냐 라는 차이점이 있겠고요 하지만 1, 21 0 인지 이 수치 자체는 시스템 부하 평균 값으로 지수이동 평균 값이라고 해서 계산이 되어 있는 값이 있는데요
그 값을 통해서 나오는 것 동일합니다 여기서 여러분들이 가장 궁금해하는 건 이건데요 도대체 1이면 높은 거냐 낮은 거냐 0이면 높은 거냐 낮은 거냐 이 부분인 거죠 사실은 1이 높은 건지 낮은 건지는 알 수가 없습니다
그게 무슨 말이냐면 한 번에 알 수는 없어요 그러니까 시스템마다 좀 다릅니다
왜? 시스템마다 코어 개수가 다르기 때문인데요
일단 첫번째로 코어 갯수에 따라서 이 부분을 확인할 수가 있는 거예요 만약에 내가 코어가 싱글 코어예요
그런데 이게 1.0 수치가 나왔습니다 그렇게 되면은 시스템 부하 상태가 100%라고 보시면 되요
그러니까 코어 개수를 기준으로 볼 수가 있는 거구요 만약에 코어가 4개인데 이 시스템 Load Average가 4가 나왔다
그러면은 시스템 부하 상태가 100% 인거구요
2가 나왔다 그러면 50% 라고 볼 수가 있는 거죠 이해가 되시나요?
코어 개수를 기준으로 판단을 할 수가 있는 거고요 이거 같은 경우에는 실제로 Load Average 툴 같은 걸 통해서 로드를 많이 일으켜보고 하시게 되면 확인을 해보실 수가 있는데요 Load Average는 두 가지를 기준으로 해서 시스템
부하 상태를 지칭하게 됩니다
일단은 숫자 값을 보는 것은 아셨죠?
만약에 내가 코어가 몇 개인지를 알고 싶으면 어떻게 해야 됩니까? whatis nproc 이렇게 하게 되면 내 프로세스 코어의 개수를 알 수가 있겠고요 내 개수가 4개야 그러면 이 4개를 기준으로 해서 숫자가 4인지, 2인지, 4보다 더 높은, 8인지 이런 것들을 보면서 시스템 부하 정도로 알 수가 있겠고요 이게 1분 평균 기준인지, 5분 평균 기준인지, 15분 평균 기준인지 이렇게 보면 되잖아요 그런데 실제로 부하를 만약에 일으켜 보면 100% 부하라는게 시스템이 완전 터질 것 같은 느낌을 받지만 실제로는 그러지 않습니다 굉장히 많은 어떤 로드가 있고 많은 작업들이 있을 때 100% 충분히 넘을 수 있고요 제가 데이터 분석이라든지 여러개 테스트를 해봤을 때는 200% 많게는 400 % 까지도 많이 올라갈 수 있어요
그렇다고 해서 시스템 자체가 마비가 되거나 문제가 된다고 보기에는 좀 어렵고요 다만 실제로 수행해야 되는
프로세스가 많다라고 볼 수 있습니다
그런데 그 프로세스가 두 가지 종류를 지칭으로 해요 단순히 실행중인 프로세스뿐만 아니라 실행중인데 cpu를 아직 점유했거나 점유하지 못한 경우들도 있거든요 그런 것들이 전부 다 R상태라고 볼 수가 있겠구요 그런데 실행중이지만 실제로 그 프로세서 그냥 S상태로 슬립 중일 수 있어요 그런 경우들은 여기서 카운팅이 되지 않습니다
하지만 D상태라고 해서 이거는 줄여서 디스크 슬립 이라는 표현도 많이 써요 그러니까 (프로세스 상태: D) Uninterruptible Sleep" 시그널 이런 것들에 대해서 받지 않고 처리를 하지 않고 지속적으로 슬립을 하고 기다리고 있는 그런 프로세스를 D상태 프로세스라고 말하게 되고요 보통은 디스크 IO를 할 때 D상태 프로세스가 많습니다
그런데 디스크 IO를 하지 않는다고 하더라도 Uninterruptible이라고 해서 시그널을 받지 않는 모드로 슬립하고 있으면
D상태라고 말하게 되요 이거 정말 헷갈려 하는 사람들이 많거든요 그냥 S인거는 정말로 슬립을 한건데
이거 같은 경우에는 웹서버 톰캣 nginx 이런 친구들이 S상태로 많이 슬립을 하고 있거든요
시그널을 다 받을 수 있는 상태라고 보시면 되겠고요 D상태는 시그널을 거부하는 상태라고 볼 수가 있어요
그래서 dd명령어라든지 디스크 IO하는 프로세스들 프로그램들은 시그널을 막 보냈어 킬 보냈어 그랬는데도 종료되지 않고 그냥 무시되는 경우가 정말 많습니다
그런 경우들이 왜? d상태이기 때문이에요 시그널을 받지 않는 거거든요
그래서 이런 걸 Uninterruptible라는 표현을 좀 적을 수가 있겠죠 여기서 말하는 Uninterruptible는 실제 인터럽트를 얘기하는 건 아닙니다 그러니까 usb가 연결됐을 때 네트워크 패키지 왔을 때 하드웨어적으로 발생되는 인터럽트를 지칭하는 건 아니에요 이거는 방해하지 않는다고 해서 시그널을 받지 않는 걸로 의미를 하게 됩니다
어쨌든 D 상태인거 R 상태인거 이 두가지를 기준으로 해서 이런 프로세스가 많으면 많을수록 Load Average가 높아진다 라고 보시면 되겠구요 많다고 해서 문제 생기는 거 아니에요
다만 당장 처리하지 않기 때문에 작업의 처리 속도가 조금은 느릴 수 있겠다라고 이해할 수 있겠습니다
보통인 경우에는 이런 것들이 많지는 않아요 그래서 실제로 지금 제가 사용하고 있는 가상머신 안에서도 별다른 프로세스를 많이 구동하고 있지는 않기 때문에 Load Average 별로 높지 않다라는 것을 알 수가 있겠고요 실제로 프로세스를 많이 사용하고 있지는 않죠
자, 여기서 이제 다른 명령으로 봤을 때 일단은 proc 안에서 Load Average라는 값을 체크해 볼 수가 있어요
이거에 대한 설명은 man proc 로도 확인할 수가 있습니다 여기서 loadavag를 검색해서 찾으시게 되면요 보이시는 것처럼 제가 설명드렸던 1분, 5분, 15분 평균이라는 값도 보이게 되겠고요 그리고 프로세스 중에서도 디스크IO를 기다리는 것과 같은 D 상태의 프로세스 그리고 또 R 상태의 프로세스 이런 친구들이 많으면 많을수록 이제 load average가 높아질 수 있다는 거 여기서 이제 말씀을 드릴 수가 있겠고요
이 설명과 마찬가지로 여기 안에 적혀져 있는 것들이
일단 차례차례 나오는 거니까 뭐가 있냐면요 cat / proc / loadavg 그러면 첫 번째, 두 번째, 세 번째는 1분, 5분, 15분 평균이라는 시스템 부합 평균 값을 통해서 확인할 수가 있겠고요 그 다음에 뒤에는 부가적으로 마지막이 생성된
프로세스 아이디하고 그 다음에 프로세스 전체 중에서 실행 중인 게 몇 개인지 이런 것들을 좀 부가적으로 정보를 보여주고 있는 수치가 있습니다
그래서 이런 식으로 이해할 수가 있겠고요
참고로 Load Average같은 경우에는 면접 때도 굉장히 많이 물어보는 개념이긴 합니다
그래서 잘 알고 계시고 이거를 정확하게 설명하시는 게 굉장히 필요할 수 있겠고요
면접에서 물어보는 만큼 실제 현업에서도 많이 필요한 내용이거든요 그래서 이런 것들도 잘 이해하시고 적용하시면 참 좋을 것 같습니다 이 내용은 저희 리얼리눅스 수업 중에서 시스템 핵심 정리라는 수업이 있습니다 조금 더 자세하게 다루는 부분들이 있구요 이 내용 뿐만 아니라 다른 내용들, 시스템에 대해서 이해하고 분석하고 확인하는 것들 이런것들은 다양한 실습 명령어를 통해서 공부를 하는 수업이 시스템 핵심 수업이거든요
만약에 더 자세한 정보들 더 제대로 공부를 한번 다시 한번 해보고 싶으시다라고 한다면 시스템 핵심정리 수업 한번 참고해 보시면 좋을 것 같습니다
https://reallinux.co.kr/course/se_system
자 여기까지 해서Load Average에 대한 내용은 마무리 짓도록 하겠습니다 감사합니다