커널에서 얼마나 많은 수의 커넥션을 처리하는 지 알고 싶습니다.
이론상으로와 실제적으로 차이가 있는지도 알고 싶습니다.
[추신] 글을 어디에 올릴지 몰라서 우선 여기에 올렸습니다. 관리자께서 올바른 곳에 옮겨주세요.
동시에 열 수 있는 소켓이 65536개라고 알고 있습니다.
실제에선 소켓만 열어놓고 아무일도 하지 않는 이상에야 차이가 많이 나겠죠.
실제로 메신저 서버 만들어서 테스트를 했었는데, 소켓이 문제라기 보단 CPU나 메모리의 문제가 65536개의 소켓 오픈 이전에 발생했습니다.
접속 소켓의 세션 정보를 메모리에 유지하고 있었거든요. 적은 내용이라도 2만개 정도의 접속이 있고나서 메모리가 모자랐던것 같습니다.
요즘은 CPU도 좋아지고 메모리도 싸져서 잘하면 65536까지 갈 수 있을지도 모르겠습니다.
이 제한도 커널 수정으로 가능하지 않을까 싶네요. 그 정보에 대해선 너무 무지한지라...
-- Signature -- 青い空大好き。 蒼井ソラもっと好き。 파란 하늘 너무 좋아. 아오이 소라 더좋아.
위의 님께서 말씀하신데로 이론상으로는 2^31까지의 갯수입니다. 즉, 32bit머신에서는 65536개까지 가능하져.
그러나 실제 문제는 되는 부분은 메모리나 CPU뿐만 아니라 네트워크상에서도 문제가 있습니다.
BMT등에서는 내부 네트워크를 사용하기 때문에 이론상의 테스트는 어느정도 가능하나, 실제 운영시 모든 클라이언트의 네트워크 환경이 틀려서 네트워크상에서 Delay현상에 발생하고, 이로 인해서 시스템의 리소스(CPU, 메모리등)를 잡아 먹게 되는 경우가 많습니다.
보통 하나의 머신에서 1000개 ~ 2000개 정도만 서비스 하는 경우가 많습니다.
그래서 보통 IDC등에서 랙장비에 씬서버를 여러대 두고 쓰는 이유중에도 하나구여.
메시저의 경우에는 네트워크 커넥션을 잡고 있기 때문에 실제 접속하는 갯수를 위와 같은 갯수정도만 하구여.
웹서비스를 하는 경우에는 커넥션을 잡고 있지 않기 때문에 위보다는 좀 더 서비스를 제공할 수 있습니다.
그리고 소켓의 갯수는 유닉스/리눅스에서는
$ ulimit 하면 나오는 File Descripter의 갯수이구여.
시스템 전체에 대해서는 /etc/sysctl.conf에 지정하시면 됩니다. 확인 방법은 $ sysctl -a
하시면 커널 파라메터를 보실수 있구여...
그럼.
2^16이 65536 아닙니까? 내용을 확인해 주세요.
텍스트 포맷에 대한 자세한 정보
<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]
동시에 열 수 있는 소켓이 65536개라고 알고 있습니다.실제에선
동시에 열 수 있는 소켓이 65536개라고 알고 있습니다.
실제에선 소켓만 열어놓고 아무일도 하지 않는 이상에야 차이가 많이 나겠죠.
실제로 메신저 서버 만들어서 테스트를 했었는데, 소켓이 문제라기 보단 CPU나 메모리의 문제가 65536개의 소켓 오픈 이전에 발생했습니다.
접속 소켓의 세션 정보를 메모리에 유지하고 있었거든요.
적은 내용이라도 2만개 정도의 접속이 있고나서 메모리가 모자랐던것 같습니다.
요즘은 CPU도 좋아지고 메모리도 싸져서 잘하면 65536까지 갈 수 있을지도 모르겠습니다.
이 제한도 커널 수정으로 가능하지 않을까 싶네요. 그 정보에 대해선 너무 무지한지라...
-- Signature --
青い空大好き。
蒼井ソラもっと好き。
파란 하늘 너무 좋아.
아오이 소라 더좋아.
위의 님께서 말씀하신데로 이론상으로는 2^31까지의 갯수입니다. 즉,
위의 님께서 말씀하신데로 이론상으로는
2^31까지의 갯수입니다. 즉, 32bit머신에서는 65536개까지 가능하져.
그러나 실제 문제는 되는 부분은 메모리나 CPU뿐만 아니라
네트워크상에서도 문제가 있습니다.
BMT등에서는 내부 네트워크를 사용하기 때문에 이론상의 테스트는
어느정도 가능하나, 실제 운영시 모든 클라이언트의 네트워크 환경이
틀려서 네트워크상에서 Delay현상에 발생하고, 이로 인해서
시스템의 리소스(CPU, 메모리등)를 잡아 먹게 되는 경우가 많습니다.
보통 하나의 머신에서 1000개 ~ 2000개 정도만 서비스 하는 경우가
많습니다.
그래서 보통 IDC등에서 랙장비에 씬서버를 여러대 두고 쓰는 이유중에도
하나구여.
메시저의 경우에는 네트워크 커넥션을 잡고 있기 때문에 실제 접속하는
갯수를 위와 같은 갯수정도만 하구여.
웹서비스를 하는 경우에는 커넥션을 잡고 있지 않기 때문에 위보다는 좀 더
서비스를 제공할 수 있습니다.
그리고 소켓의 갯수는 유닉스/리눅스에서는
$ ulimit 하면 나오는 File Descripter의 갯수이구여.
시스템 전체에 대해서는 /etc/sysctl.conf에 지정하시면 됩니다.
확인 방법은
$ sysctl -a
하시면 커널 파라메터를 보실수 있구여...
그럼.
딴지 거는 것은 아닌데
2^16이 65536 아닙니까? 내용을 확인해 주세요.
댓글 달기