https://injae-kim.github.io/dev/2020/07/09/how-to-check-single-server-load-average.html

서버에 걸리는 부하, 추측하지 말고 계측하자

주니어 백엔드 개발자인 라이언은 자신이 개발하고 배포한 서비스가 서버 위에서 아무 문제 없이 잘 돌아가는 것을 보고 매우 만족하는 평화로운 나날을 보내고 있었습니다.

어느날, 라이언이 속한 개발팀의 Slack 채널에 금요일 퇴근 직전 경고 메시지가 날아오게 됩니다. “로그인이 안돼요!” “서버 지금 이상해요!”

주니어 백엔드 개발자인 라이언은 소중한 금요일 밤을 수호하기 위해 신속하게 문제를 해결하고 퇴근하고자 합니다.

이때, 서버에 어떤 문제가 발생했는지를 짐작이나 추측이 아닌, 어떻게 하면 정확하게 계측하고 분석할 수 있을까요?

오늘은 서버에 걸리는 부하를 리눅스의 커널에 대한 이해를 기반으로 계측하는 방법과 그 원리에 대해서 알아보겠습니다.

이 글은 대규모 서비스를 지탱하는 기술24시간 365일 서버/인프라를 지탱하는 기술 책을 읽고 혼자만 알기엔 너무 좋은 내용이 있어서 공유를 목적으로 작성하게 되었습니다.

서버야 어디가 아프니?

Untitled

서버에 걸리는 부하의 정체를 파악해서 해결하려면, 먼저 서버에 어떤 부하가 걸리는지 부터 알아야 합니다.

일반적으로 서버에 걸리는 부하는 크게 네트워크 부하 와 서버의 성능 부하 로 분류됩니다.

네트워크 부하는 말 그대로, 서버에 접속하려는 사람이 폭발적으로 증가하여 트래픽이 급증한 경우의 네트워크에 걸리는 부하를 말합니다.

이러한 경우 서버 앞단에서 트래픽 자체를 분산시켜주는 로드밸런서를 사용하거나 서버의 대수를 더 늘리는 방식으로 해결할 수 있습니다.

하지만, 애초에 우리의 서버가 서버 자체의 성능을 100% 발휘하고 있지 않다면 서버의 대수를 늘리거나 로드밸런서를 사용해도 그 효율이 매우 낮을 것 입니다.

따라서 로드밸런서 등으로 네트워크 부하에 대한 분산을 고려하기 전에, 서버 1대가 자신의 성능을 잘 발휘하고 있는지 부터 확인해 볼 필요가 있죠.

그렇다면, 네트워크 부하를 제외한 서버에 걸리는 부하는 무엇이 있을까요? 바로 알아보겠습니다.

단일 서버의 병목 원인 조사

단일 서버에 걸리는 부하의 원인은 크게 2가지로 분류됩니다.