[질문] 서버에 접속한 모든 클라이언트가 갑자기 느려집니다..
글쓴이: yhjj777 / 작성시간: 화, 2004/07/20 - 7:55오후
freebsd, 싱글 쓰레드, Kqueue로 돌아가는 게임 서버입니다.. 게임 서버의 프로세스 점유율은 0퍼센트를 유지하고 있는데요. 24명정도를 넘어가면 갑자기 접속한 모든 클라이언트가 느려지네요..
제가 생각하기에 이런 현상이 발생하려면 서버가 무한 루프를 돌거나 블락이 되야될거같은데.. 코드중에는 무한 루프를 도는 코드가 한개도 없습니다.. 거기다 20명정도까진 정상적으로 작동하는데 22~24명을 넘어가면 갑자기 느려져버리고... 다시 사람이 몇명 나가서 20명선이 되면 빨라지네요..
문제라고 추측하고 있는 건 지금 서버에 물려있는 허브의 문제, DB에 접속해서 쿼리를 날려주는 시간.. 두가지인데요.. 세이브틱을 돌면서 마지막으로 저장한게 120초 전이라면 유저와 관련된 정보를 세이브를 시켜주거든요.. DB가 같은 서버내에 있는데도 쿼리를 날리는데 지연시간이 체감될만큼 있을수도 있나요?
Forums:
db 로 무엇을 사용하고 계십니까? 그리고, db 에 쿼리 날리고 결과
db 로 무엇을 사용하고 계십니까? 그리고, db 에 쿼리 날리고 결과 받을 때 사용하는 db api 가 블러킹 되는 것인지요?
만약 그렇다면, db 하나의 쿼리가 결과를 리턴할 때까지 다른 모든 접속 처리가 일순간 정지하는 경우가 아닐까 합니다. db 쿼리 자체도 비동기로 처리하는 방법을 강구하셔야 할 것 같습니다.
순전히 제 추측일 뿐이니까요... 좀 더 자세한 정보를 부탁드립니다.
[quote="bugiii"]db 로 무엇을 사용하고 계십니까? 그리고,
DB로는 MySQL을 사용하고 있습니다. 그런데 그 쿼리 날리는 시간이라는게 체감될 정도로 딜레이가 있는건가요?? 같은 서버에 있는 DB에 접근해서 하는건데도요.. 음..
여담으로 방금 전 허브를 아예 빼버렸더니 속도가 기존의 2배까지 나오네요. 더 테스트를 해봐야겠지만 똑같은 상황에서 아까와 같은 상황이 발생하지않는다면 허브 문제인것 같습니다.
이런 문제인것 같기도 합니다.. 현재 소켓을 논블락킹 소켓으로 처리를 하
이런 문제인것 같기도 합니다.. 현재 소켓을 논블락킹 소켓으로 처리를 하였는데 클라이언트의 데이타를 서버에서 받을때 우드 블락 처리를 안했었거든요. 그런 처리를 안하고 넘어가다보니 클라이언트에서는 서버와의 통신이 느려저서 생긴 문제라고 추측이 되는데.. 일단은 처리하는 루틴을 넣어서 돌리고 있는데.. 아직까진 잘모르겠네요. 제 추측이 맞는지는.. -.-; 요즘들어 제 실력이 정말 허접하다는걸 느끼고 있네요.. 흑흑
문제는 kqueue로 넘기는 타임아웃떄문이었습니다. 타임 아
문제는 kqueue로 넘기는 타임아웃떄문이었습니다. 타임 아웃을 줄이니 잘됩니다..
댓글 달기