bot-agent-dead-lock

Bot Agent와 Game Loop 간의 Dead Lock 문제

문제 인식

  • bot session의 수를 250개로 늘려서 서버에 부하 테스트를 진행 중에 20 fps로 프레임은 잘 나오지만 cpu utilization이 35%으로 이상하게도 낮게 나왔다.

frame times

  • 또한 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를 통해 관리하여 동기화 하게 하자