Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 2

인도네시아 서비스 장애보고

2012-04-02 신영욱

[현상]

1. 여러 대의 서버에 유저들이 골고루 분포되지 않고 특정 서버에 몰리는 현상 발생

2. 특정 서버로 유저가 몰리면서 서버 패킷큐의 증가로 인한 메모리 부족현상 발생 (메모리 부족으로


인한 가상 메모리의 사용으로 OS 가 전체적으로 느려지는 현상으로 이어짐)

3. 전반적인 OS 의 성능저하로 인해 패킷이 원활히 처리되지 못하고 패킷큐가 점점 쌓이다가


최대허용개수제한으로 인한 자체 서버 셧다운으로 이어짐

4. 서버에 부하가 몰리는 상황에서 SQL 서버의 질의응답이 약 10 초간 지연되는 현상


(OS 의 부하로 인한 지연인지 다른 이유가 있는지 확인필요)

5. 서버 셧다운 후 WatchDog 이 서버 재구동 시 정상적으로 서버가 구동되지 못하는 현상

[결론]

특정 상황(유저가 한곳의 서버에 집중되는)에서 패킷큐의 비정상적인 증가로 인해 가상메모리를


사용하게 되고 가상메모리 증가로 인한 OS 의 성능 저하로 SQL 서버와의 통신 장애가 발생하고 이로
인한 유저의 응답대기 현상이 발생하면서 더욱 많은 패킷이 쌓이고 이로 인한 자체적인 셧다운
처리로 이어짐.

셧다운 후 WatchDog 의 구동에서도 간헐적으로 장애가 발생함

[개선]

현상 1, 2, 3

- 패킷 큐의 다양화(용량별 큐를 분리)와 최대허용 개수 이상에 대해서는 동적할당으로 처리

- TCP 와 UDP 를 하나의 로직스레드에서 처리하는데 이를 각자 다른 스레드로 분리

(추후 릴레이 서버를 추가하기 위한 전초단계)

- 파일 로그와 같은 BLOCKING API 를 로직스레드에서 분리

- 로직스레드에서 CRITICAL SECTION 을 이용한 모든 동기화 코드 삭제

- 서버에서 허용할 수 있는 최대인원 제한(허용인원 초과시 신규로 접속 시도하는 클라이언트의


접속을 종료시키고 다른 서버로 이동되게 함)

현상 4

- SQL 서버 프로파일링으로 문제점 파악

- OLEDB 의 Batch Execution 을 RPC Execution 으로 수정(Cache Hit 증가)


현상 5

- DB 내부에 셧다운 된 서버정보가 존재하여 셧다운 된 서버를 재구동 못하게 하는데 서버가
셧다운 되면 자동으로 DB 에서 삭제하는 기능을 추가

[적용]

- 패킷큐의 패킷사이즈를 줄이고 일정 크기 이상의 패킷에 대해서는 동적 할당으로 수정


(32K -> 10K 로 변경)

- 워커스레드에서 Sleep(1)을 적용

- 로직스레드와 UDP 스레드 간의 동기화 코드 삭제


(유저관리 클래스 동기화 작업 삭제)

- TCP, UDP 용 패킷 큐를 별도록 분리하여 로직스레드에서 처리

- WatchDog 기능 추가

- 좀비 클라이언트에게 패킷을 전송하지 않는 코드 적용

[목표]

- 게임서버의 최대 허용인원을 두어 서버가 셧다운 되는 문제를 방지함


(최대 허용인원을 파악하기 위한 검증절차가 필요)

- 로그인 서버 추가로 각 게임 서버별로 균등하게 유저가 분포되도록 함

- 릴레이 서버 추가로 게임서버의 부하를 분리함

- 로그봇(로그서버) 추가로 게임서버의 IO 트래픽을 분리함

- 서버 원격관리 툴의 도입으로 긴급점검 혹은 장애에 빨리 대처할 수 있게 함

You might also like