Tag Archives: 서버관리

서버의 Load Average는 몇까지가 정상인가?

유닉스 기반의 서버에는 서버자체의 부하는 load average로 표현한다.

나의 경우에는 리눅스 서버만을 운영하고 있으므로 철저히 리눅스 베이스의 이야기를 하겠다.

top명령어를 통해 load average를 확인할수 있다.

사용자 삽입 이미지


위와 같은 형식으로 결과가 출력되는데 오른쪽 위에 load average가 표현됨을 알수 있다.

3개가 나오는데 각 1분, 5분, 15분 평균의 로드를 표시해 준다.

고로 가장 왼쪽이 가장 현재를 표시하고 있다라고 생각하면 되겠다. 그런데 운영을 하다보면 궁금한점이 있다.

“과연 몇까지 올라가도 정상으로 봐야 하는가?”

이부분은 어디 리눅스 관련 커뮤니티에 질문해 봐도 매우 추상적인 답변을 받게 되는 영역의 질문이다.

나역시도 저런 값이 존재하긴 하지만 서버상태는 으로 파악하는 수준의 기지를 발휘할수밖에 없었다.

하지만 얼마전에 SK커뮤니케이션즈의 모 대형 서비스 시스템을 담당하고 계신분을 만난 자리에서 대기업은 어떻게 이해하고 있는지 들어볼수 있었다.

결론은 이거였다.

CPU 1개당 2까지의 로드까진 정상으로 본다.

이게 무슨말인가? 현재의 대부분에 쓰이고 있는 요즘의 평균적인 제온 시스템이라면 CPU당 2까지의 로드까진 문제없는것으로 본다는것이다.

그렇다면 듀얼코어같이 HT(Hyper Threading)을 지원하는 CPU는 어떻게 계산하는지 물어보았다.

HT의 경우 CPU 2개로 친다는것이다. 쿼드코어의 경우에는 CPU4개로 친다는것이다.

고로 듀얼코어 CPU를 2개 꼽은 서버라고 하면 4 CPU x 2 = 8 의 로드까진 괜찮다는것으로 친다는것이 결론이었다.

내 개인 서버의 경우에는 CPU가 1개이지만 HT를 지원하므로 로드는 4까지 괜찮다는 결론이 나오게 되었다.

이러한 결과는 아마도 서버관리자들 사이에서도 의견이 분분한 부분이라 생각하는 부분이다. 하지만 대기업에서 사용하고 있는 방식이니 저렇게 생각을 하여도 괜찮을꺼라 생각해 본다.

HTTP 1.1 커넥션 수는 2개이다.

요즘 Ajax Leaders Club 이라는 스터디 모임에 참여하고 있습니다. 사실 리더는 못되지만 노력은 하고 있죠;;

몇일전 카페에서 커넥션수에 대한 논의가 있었던 모양입니다. 블랭커스님의 블로그글을 링크하자면 HTTP 1.0에서는 커넥션 제한이 4개였는데 1.1에 들어와서 2개로 줄었다는것입니다.

이부분에 대해서 저도 기억이 나는 부분이 있네요. 중학교~고1 시절 홈페이지를 만드는데(그당시에는 대부분이 모뎀이었고 잘사는 사람들은 ISDN을 쓰곤 했었습니다) 책에 이런 내용이 있었었죠.

“인터넷 익스플로러의 경우 동시에 4개씩을 다운 받을수 있습니다. 큰 이미지의 경우 4개로 쪼개면 좀더 빠른 다운로드를 도모할수 있습니다.”

그당시에는 홈페이지라고는 그저 HTML에 글자 몇개 끄적이고 큰 이미지 하나 올려놓으면 정말 멋지고 포토샵 잘하는 부러운 사람이었습니다.

그런데 저는 한발 더 앞서 그 그림을 4개로 쪼개기까지 했죠. 그리곤 BORDER없는 TABLE 2×2를 만들어 그림을 끼워넣곤 했습니다. 그당시의 모뎀으로 더더욱 잘 느낄수 있었지만 그림 4개가 동시에 읽혀지는 장관을 볼수 있었죠.

마치 달력을 넘긴달까? 위에서 부터 내려오는 혹은 GIF의 모자이크 형식으로 대충 읽었다가 점점 선명해 지는 광경을 이제는 볼수 없게 되어 버렸네요.

각설하고 그 2개의 커넥션이 호스트별 2개인지 브라우저별 2개인지 궁금해졌습니다.

증거자료를 제시하진 못하지만 서버를 모니터링 하면서 시름해본 결과 브라우저별 2개이네요. 당연하겠지만요;

브라우저 여러개 띄우면 다른 브라우저에서 다운중이라고 현재 브라우저가 기달려선 안되겠죠.

w3의 RPC문서 에도 같은 내용이 있네요. 8.1.4 Practical Considerations에 잠깐 언급하는군요.

물론 2개는 디폴트 설정이고 익스플로러의 경우는 레지스트리 설정을 바꾸어  늘릴수 있습니다.

HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings 밑의

MaxConnectionsPerServer 값을 2개에서 10(16진수 a)개정도로 올리면 속도의 향상을 느낄수 있습니다.

하지만 웹서비스를 준비하는 기업의 입장에서는 대부분의 사용자가 디폴트 설정을 가지고 있을것이다고 가정하고 작업하는것이 맞겠지요. 그래서 자바스크립트 파일을 합치는 식으로 로드해야 하는 오브젝트의 수를 줄이는것입니다.

열리는 커넥션을 테스트 하기위해서는 파이어폭스의 파이어버그나 iWatch등을 사용하면 됩니다. iWatch의 경우 Unix기반의 운영체제에서만 돌아가는 모양이네요. 파이어버그는 정확한 시간을 표시해 주지 못하는듯합니다.

서버관리자의 입장이라면 다음과 같이 측정할수 있습니다.

[code][root@tomeii /] # netstat -an | grep -c “:80.*127.0.0.1.*ESTABLISHED”[/code]

127.0.0.1에 모니터링할 호스트의 IP를 적어주면 됩니다.

서버의 80번 포트에 현재 접속한 호스트의 커넥션 수를 표시해 줍니다. 정상적이라면 페이지가 막 열릴때 2개를 넘지 않겠지요.

2개를 넘으면 악의적인 공격이다라고 판단할수도 있을것이라 생각합니다. 보통의 사용자가 같은 서버의 페이지를 2개이상 띄워놓고 동시에 접속하는 것이 아닌 이상은요.

아무튼 HTTP 1.1의 커넥션 수는 2개가 맞군요. 정확히는 디폴트 수가 2개입니다. 요즘 나오는 브랜드 PC들은 임의로 올려서 나오기도 하는군요. 제가 이번에 산 노트북이 복구시디로 밀고 확인해 보니 10개로 되어있습니다.