Bot Agent와 Game Loop 간의 Dead Lock 문제
문제 인식
- bot session의 수를 250개로 늘려서 서버에 부하 테스트를 진행 중에 20 fps로 프레임은 잘 나오지만 cpu utilization이 35%으로 이상하게도 낮게 나왔다.

- 또한 game session에 관전으로 접속을 시도 할 때, 확률적으로 게임 3초간의 frame 정보 공백이 발생하여 websocket 연결 재시도 후 main 화면으로 이동 되는 문제가 발생하였다.
분석
- 대부분의 thread가 blocked 상태인 것을 알 수 있었다.
$ grep -oE "Thread.State: [A-Z_]+" /tmp/d.txt | sort | uniq -c
458 Thread.State: BLOCKED
12 Thread.State: RUNNABLE
40 Thread.State: TIMED_WAITING
24 Thread.State: WAITIN
배운 것
- game session 내부에서 fps를 검사하면 game session 자체가 멈췄을 때, 정보를 저장하지 못해서 통계가 오염될 수 있다.
- dead lock을 막기 위해 player의 action 같은 외부 thread의 접근을 queue를 통해 관리하여 동기화 하게 하자