kyuseo의 게임 프로그래밍
오랜만에 게임서버 데드락(Deadlock) 으로 고생하면서… 본문
개요.. |
처음 게임 서버를 개발할 때 데드락(Deadlock) 이라는 교착상태로 무척이나 고생한적이 있습니다.
알 수 없는 원인으로 중단되는 서버를 살려보기 위해서 모든 Lock 에 로그를 남기고 하나하나 추적하여 겨우 겨우 서비스를 복구 한적이 있었는데 그때 덕분에 시스템적으로 데드락을 막을 수 있는 데드락 디텍터(Deadlock Detector)를 개발하고 좀더 안정적인 Lock 을 구사하였지요.
이후부터는 그 무서운 데드락의 공포로부터 벗어날 수 있었는데, 너무 자만에 빠져서인지 게임 엔진의 일부분을 데드락 디텍터를 이용하지 않고 코드를 작성하였습니다. 덕분에 가끔 게임서버가 먹통이 되어 돌아가시는 상태가 가끔 발생되어 원인을 찾을 수 없었는데 알고 보니 게임엔진의 일부분이 데드락 위험이 있었네요. ^^;
아무리 코딩을 많이 하였더라도 코드 짤 때 항상 신중히……
데드락 감지기 (데드락 디텍터)의 모습 |
[1] 2008-07-27 17:17:36: [1] 2008-07-27 17:17:36:*************** DeadLock Dump Start *************** [1] 2008-07-27 17:17:36:Source [1] 2008-07-27 17:17:36:d:\pmangoengine\pmangonetwork\psocketeventthread.h:64 f06a10 [1] 2008-07-27 17:17:36:d:\pmangoengine\pmangonetwork\pclient.cpp:279 f06998 [1] 2008-07-27 17:17:36:d:\fungrepproject\commonmultiserver\serveronpacket.cpp:172 8c36c4 [1] 2008-07-27 17:17:36:Dest [1] 2008-07-27 17:17:36:d:\pmangoengine\pmangonetwork\psocketeventthread.h:64 f06a10 [1] 2008-07-27 17:17:36:d:\fungrepproject\commonmultiserver\serveronpacket.cpp:157 8c36c4 [1] 2008-07-27 17:17:36:d:\pmangoengine\pmangonetwork\pclient.cpp:279 f06998 [1] 2008-07-27 17:17:36:*************** DeadLock Dump End *************** [1] 2008-07-27 17:17:36: |