kyuseo의 게임 프로그래밍

오랜만에 게임서버 데드락(Deadlock) 으로 고생하면서… 본문

Kyuseo 소개, 잡담

오랜만에 게임서버 데드락(Deadlock) 으로 고생하면서…

kyuseo 2008. 7. 28. 19:36

개요..

 

처음 게임 서버를 개발할 때 데드락(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: