(게임) 서버 정기 점검이 필요한 이유
…반쯤은 유머니 적당히 해석합시다(먼산).
후배인 (전직) 게임 개발자 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년대 초반의 게임들은 디비에서 데이터 삭제 자체를 안하고 넘어가는 경우도 왕왕 있었다고 한다. 디비 커밋 — 특히 하드디스크를 꼭 갔다오는 — 연산들은 최대한 피하려고 메모리 디비에 “지워졌다"고 체크만 해놓고, 이것도 묶어서 커밋하고(…), 정기 점검 시간에 몰아서 삭제하는 일을 했다고 한다(…).
-
위에서 내가 결국엔 죽는다고 말한 것도 반응 속도가 생명인 게임 서버의 경우 메모리 릭 때문에 물리 메모리가 모자라서 하드 스왑을 시작하면 반쯤 죽은거라고 봐도 무방하기 때문. ↩︎