[질문] 서버에 접속한 모든 클라이언트가 갑자기 느려집니다..

yhjj777의 이미지

freebsd, 싱글 쓰레드, Kqueue로 돌아가는 게임 서버입니다.. 게임 서버의 프로세스 점유율은 0퍼센트를 유지하고 있는데요. 24명정도를 넘어가면 갑자기 접속한 모든 클라이언트가 느려지네요..

제가 생각하기에 이런 현상이 발생하려면 서버가 무한 루프를 돌거나 블락이 되야될거같은데.. 코드중에는 무한 루프를 도는 코드가 한개도 없습니다.. 거기다 20명정도까진 정상적으로 작동하는데 22~24명을 넘어가면 갑자기 느려져버리고... 다시 사람이 몇명 나가서 20명선이 되면 빨라지네요..

문제라고 추측하고 있는 건 지금 서버에 물려있는 허브의 문제, DB에 접속해서 쿼리를 날려주는 시간.. 두가지인데요.. 세이브틱을 돌면서 마지막으로 저장한게 120초 전이라면 유저와 관련된 정보를 세이브를 시켜주거든요.. DB가 같은 서버내에 있는데도 쿼리를 날리는데 지연시간이 체감될만큼 있을수도 있나요?

bugiii의 이미지

db 로 무엇을 사용하고 계십니까? 그리고, db 에 쿼리 날리고 결과 받을 때 사용하는 db api 가 블러킹 되는 것인지요?

만약 그렇다면, db 하나의 쿼리가 결과를 리턴할 때까지 다른 모든 접속 처리가 일순간 정지하는 경우가 아닐까 합니다. db 쿼리 자체도 비동기로 처리하는 방법을 강구하셔야 할 것 같습니다.

순전히 제 추측일 뿐이니까요... 좀 더 자세한 정보를 부탁드립니다.

yhjj777의 이미지

bugiii wrote:
db 로 무엇을 사용하고 계십니까? 그리고, db 에 쿼리 날리고 결과 받을 때 사용하는 db api 가 블러킹 되는 것인지요?

만약 그렇다면, db 하나의 쿼리가 결과를 리턴할 때까지 다른 모든 접속 처리가 일순간 정지하는 경우가 아닐까 합니다. db 쿼리 자체도 비동기로 처리하는 방법을 강구하셔야 할 것 같습니다.

순전히 제 추측일 뿐이니까요... 좀 더 자세한 정보를 부탁드립니다.

DB로는 MySQL을 사용하고 있습니다. 그런데 그 쿼리 날리는 시간이라는게 체감될 정도로 딜레이가 있는건가요?? 같은 서버에 있는 DB에 접근해서 하는건데도요.. 음..

여담으로 방금 전 허브를 아예 빼버렸더니 속도가 기존의 2배까지 나오네요. 더 테스트를 해봐야겠지만 똑같은 상황에서 아까와 같은 상황이 발생하지않는다면 허브 문제인것 같습니다.

yhjj777의 이미지

이런 문제인것 같기도 합니다.. 현재 소켓을 논블락킹 소켓으로 처리를 하였는데 클라이언트의 데이타를 서버에서 받을때 우드 블락 처리를 안했었거든요. 그런 처리를 안하고 넘어가다보니 클라이언트에서는 서버와의 통신이 느려저서 생긴 문제라고 추측이 되는데.. 일단은 처리하는 루틴을 넣어서 돌리고 있는데.. 아직까진 잘모르겠네요. 제 추측이 맞는지는.. -.-; 요즘들어 제 실력이 정말 허접하다는걸 느끼고 있네요.. 흑흑

yhjj777의 이미지

문제는 kqueue로 넘기는 타임아웃떄문이었습니다. 타임 아웃을 줄이니 잘됩니다..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.