rein's world

(게임) 서버 정기 점검이 필요한 이유

…반쯤은 유머니 적당히 해석합시다(먼산).

후배인 (전직) 게임 개발자 i 모군(대역;가명)과의 대화 :$

[18:38:26] <i> 먼가 만들것좀주실분 ㅠ [..]
[18:38:54] <rein> ...
[18:38:58] <rein> 자동 코딩 머신이 필요함
[18:39:07] <rein> 기왕이면 멀티스레드 응용에서 레이스 컨디션도 좀 잡아주고
[18:39:11] <rein> 데드락 프리딕션도 좀 해주고
[18:39:12] <rein> ...
[18:39:20] <i> ㅇㅇ
[18:39:21] <i> 저도필요함
[18:39:31] <i> 쓰레드기능은 없어도괜찮음
[18:39:40] <rein> 아 안돼
[18:39:41] <rein> ...
[18:39:57] <rein> new BYTE[ length ]
[18:39:58] <rein> 해놓고
[18:40:04] <rein> 또 new BYTE[ length ]
[18:40:05] <rein> 하고 있네
[18:40:06] <rein> ...
[18:40:10] <rein> (같은 포인터에 할당)
[18:40:11] <i> 괜찮아요
[18:40:13] <i> 안죽으니까
[18:40:18] <rein> 결국엔 죽어
[18:40:18] <rein> ...
[18:40:23] <rein> 하드 긁다 큐 뻑남
[18:40:32] <i> ㅇㅇ
[18:40:32] <rein> 시간이 좀 걸리긴하겠지만
[18:40:34] <i> 서버는
[18:40:38] <i> 정기점검 시간이있는게
[18:40:41] <i> 좋은거같음
[18:40:48] <rein> ...
[18:40:50] <rein> 실로 그러함
[18:40:55] <rein> 인덱스도 리빌드하고 디비도 튜닝하고
[18:40:59] <i> ㅇㅇ
[18:41:00] <rein> 죽은 메모리도 반납하고(...)
[18:41:04] <i> 말도안되는 버그로부터
[18:41:05] <i> 안전함
[18:41:08] <rein> ㅇㅇ
[18:41:09] <rein> ...
[18:41:24] <i> 제가 21일 지나면 서버가 죽는 버그
[18:41:27] <i> 말씀드렸었던듯
[18:42:36] <rein> ...

사실 주기적으로 전체 시스템을 내렸다 올릴 수 있다는 것만으로도, 단위가 크지 않은 메모리 릭1물론 반복도 적어야 — 이나, 잘 설계되지 않은 디비 인덱스 문제 같은게 해결된다(…).

메모리 릭은 프로세스에 종속된 거니 다시 시작하면 그만이고, 디비 인덱스도 빨리 못만들어낼 — 실시간으론 하면 안될 — 녀석들도 만들어내면 그만이니까 -_-;;

여담이지만 하드웨어 성능이 지금보다 안 좋았던 2000년대 초반의 게임들은 디비에서 데이터 삭제 자체를 안하고 넘어가는 경우도 왕왕 있었다고 한다. 디비 커밋 — 특히 하드디스크를 꼭 갔다오는 — 연산들은 최대한 피하려고 메모리 디비에 “지워졌다"고 체크만 해놓고, 이것도 묶어서 커밋하고(…), 정기 점검 시간에 몰아서 삭제하는 일을 했다고 한다(…).


  1. 위에서 내가 결국엔 죽는다고 말한 것도 반응 속도가 생명인 게임 서버의 경우 메모리 릭 때문에 물리 메모리가 모자라서 하드 스왑을 시작하면 반쯤 죽은거라고 봐도 무방하기 때문. ↩︎