본문 바로가기

01. operation/i. Theory

Server 부하량 측정 및 성능 검토

서버의 부하량 측정 관련하여서 정리하다가 문득 생각이 들어서 적은 내용이다.
사실상 서버의 부하를 정확하게 측정하기란 너무나 애매한 상황이 많이 발생되어지기 마련이고, 이러한 상황속에 엔지니어들은 이 부하가 어디서 발생이 되어지는지, 그리고 최적화 작업을 어떻게 진행할것인지에 대해서 많은 고민을 하고 있고 해결책을 내 놓는다.
 
가장 좋은것은 돈으로 발라주는 서버...=_=;; (사실 돈으로 안되는게 어디있냐)
 
서버안에 5만원권 지폐로 가득 채워봐라.......아마도 서버는 쌩쌩 날라다닐것이다.
(설마 정말로 하시는분은 없을거라고 생각을 하지만.)
 
서버 부하가 높으면 서비스 지연, 혹은 장애 커지면 OS가 뻑가는일까지 발생되어지게 마련이다.
그래서 서버 담당자들은 항상 CPU, IO관련되어진 상황을 예의 주시를 하기 마련이다. 그중에서 중요한 부분은 TIME, I/O TIME, %USER, %SYSTEM등의 수치는 매우 중요한 수치이며 대부분의 프로세서 job중 가장 많이 차지하는 부분이기도 하다.
 
예를 들면 특정 사이트에 mysql demon을 찾아보면 아래와 같이 나타난다.
ps auxw|grep mysql
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     17294  1.3  3.7   3654  1192 pts/4    S    13:35   0:00 /bin/sh /home/tims63/mysql/bin/mysqld_safe --defaults-extra-file=/home/tims63/mysql/my.cnf --user=mailadm -P 3306
mailadm  17323  54.3  43.7   603654  211192 pts/4    Sl   13:35   0:00 /home/mysql/libexec/mysqld --defaults-extra-file=/home/tims63/mysql/my.cnf --basedir=/home/mysql --datadir=/home/mysql/data --user=mailadm --pid-file=/home/mysql/data/kki.pid --skip-external-locking -P 3306
 
여기서 중요하게 봐야할 부분은 %CPU, %MEM, VSZ, RSS
실제 메모리사용율도 높을뿐더러, CPU job역시 높게 나타나진다 여기 상태에서 sar data를 한번 살펴보면 아래와 같이 나타난다. (실 서버가 이렇게 나타나는것은 아니고, 인의적으로 작성자가 수정을 한 값이다)
 
sar 1 100
              CPU     %user     %nice   %system   %iowait    %steal     %idle
               all      12.40      0.00      34.33      50.00      0.00     43.27
               all      12.37      0.00      35.69      54.47      0.00     41.47
               all      12.84      0.00      38.06      55.00      0.00     39.10
               all      13.74      0.00     33.28      51.00      0.00     35.98
 
이럴경우 엔지니어는 과연 어떤 부분에 대한 문제를 찾겠는가? 답은 RSS (실제 물리메모리)가 부족하다는 답을 내릴것이다 (물론 여기서 이 정보만으로는 부족하다, free, top, vmstat 등과 같은 정보도 확인해야한다)
 
그후 메모리 증설을 하였고, 결과는 iowait가 확인히 줄수 있다는것을 알게 되었다. 만약 물리적인 메모리를 늘렸음에도 불구하고 io가 올라간다면 해당 서버에 IO job이 서버가 허용할수 있는 범위를 넘어선다는 의미이다.
 
이럴경우에는 서버 이중화, 혹은 부하분산을 해야하게 되어지는 작업까지 진행될수가 있다. (그렇지 않다면 위 처럼 서버안에 5만원권 지폐를 넣어두어도 된다...)하지만 모든 문제들이 하드웨어에서만 집약 되어지지는 않고, 소프트웨어적으로 튜닝을 어찌 하느냐에 따라서 판도는 달라질수도 있는 부분도 존재하다보니 개발자와 투닥거리도 해야할일도 종종 생긴다.
 
예를 들면 무식하게 큰 query문을 하루에 몇번씩이고 하고 불필요한 update까지 더해지게 되어진다면 이 무식하게 큰 query문때문에 CPU부하뿐만 아니라 메모리 사용율까지 높아지게 되어지는 부분을 찾을수 있다면 서버안에 돈을 넣어두는일을 찾을수가 있다.