더북(TheBook)

이러한 일이 일어나는 동안 서버에서는 다음 현상이 발생합니다.

1. CPU 사용량이 증가합니다.

2. 클라이언트에서 메시지를 받는 속도보다 메시지를 처리하는 속도가 느릴 때 발생합니다. 이때 서버의 메모리 사용량이 증가합니다.

3. 클라이언트에 보낼 메시지의 발생 속도보다 실제로 메시지를 보내는 속도가 느릴 때도 발생합니다. 이때도 서버의 메모리 사용량이 증가합니다.

4. 즉, CPU 과부하는 램 사용량 증가로 이어집니다.

서버에서 이러한 일이 계속 진행되면 32비트(x86) 서버에서는 메모리를 수 기가바이트까지 쓰게 됩니다. 그러다가 메모리 할당 함수 malloc()에서 null을 리턴합니다. 게임 서버에서 이에 대한 적절한 처리를 하지 않는다면 비정상 종료로 이어지겠지요.

p367

▲ 그림 9-3 과부하에 걸린 서버가 시간이 지남에 따라 발생하는 현상

int* a = malloc(1000);
// a가 null이면 접근 위반 오류를 발생한다.
a[0] = 1;
 
// 메모리 공간이 모자라면 bad_alloc 예외를 발생한다.
MyClass* b = new MyClass();
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.