이러한 일이 일어나는 동안 서버에서는 다음 현상이 발생합니다.
1. CPU 사용량이 증가합니다.
2. 클라이언트에서 메시지를 받는 속도보다 메시지를 처리하는 속도가 느릴 때 발생합니다. 이때 서버의 메모리 사용량이 증가합니다.
3. 클라이언트에 보낼 메시지의 발생 속도보다 실제로 메시지를 보내는 속도가 느릴 때도 발생합니다. 이때도 서버의 메모리 사용량이 증가합니다.
4. 즉, CPU 과부하는 램 사용량 증가로 이어집니다.
서버에서 이러한 일이 계속 진행되면 32비트(x86) 서버에서는 메모리를 수 기가바이트까지 쓰게 됩니다. 그러다가 메모리 할당 함수 malloc()에서 null을 리턴합니다. 게임 서버에서 이에 대한 적절한 처리를 하지 않는다면 비정상 종료로 이어지겠지요.
▲ 그림 9-3 과부하에 걸린 서버가 시간이 지남에 따라 발생하는 현상
int* a = malloc(1000); // a가 null이면 접근 위반 오류를 발생한다. a[0] = 1; // 메모리 공간이 모자라면 bad_alloc 예외를 발생한다. MyClass* b = new MyClass();