2014-04-25 2 views
0

내 질문에 대답하려면 서버 문제가 아니라 클라이언트 문제였습니다. 몇 가지 알려지지 않은 이유로, 내 맥 OSX ~ 7.8k 연결 이상 만들 수 없습니다. 클라이언트로 우분투 기계를 갖는 것이 문제를 해결했습니다.socket.io 멀티 코어 컴퓨터에서의 최대 연결 테스트


내 서버를 유지할 수있는 최대 연결 수를 추정하기 위해 노력하고있어

[질문]. 그래서 간단한 socket.io 서버와 클라이언트 테스트 코드를 작성했습니다. 당신은 그것을 볼 수있다 here. : gist

위의 요점은 매우 간단합니다. 서버는 들어오는 모든 소켓 요청을 받아들이고 정기적으로 연결된 연결 수와 cpu, 메모리 사용량을 인쇄합니다. 클라이언트는 특정 번호로 주어진 socket.io 서버에 연결을 시도하고 연결을 유지하지만 아무것도하지 않습니다.

하나의 서버 (우분투 컴퓨터)와 하나의 클라이언트 (내 mac osx)에서이 테스트를 실행하면 약 7800 개의 연결이 성공적으로 만들어졌으며 연결이 끊어졌습니다. 그래서 다음으로, 다른 CPU 코어에서 더 많은 서버를 실행하고 테스트를 다시 실행했습니다. 내가 예상 한 것은 주요 병목 현상이 CPU 성능이되기 때문에 더 많은 연결이 이루어질 수 있다는 것입니다. 하지만 내가 본 것은 내가 얼마나 많은 코어를 사용했는지,이 서버가 유지할 수있는 총 연결 수는 약 7800 개의 연결입니다. 왜 내 서버가 이와 같이 작동하는지 이해하기 어렵습니다. 아무도 내게이 동작 뒤에 이유를주지 또는 내가 뭘 놓친 가리킬 수 있습니까?

연결을 끊기 전에 만들어진 연결 수.

  • 1 서버 : 7800
  • 서버 3 : 2,549, 2,299, 2,979 (각)
  • 4 서버 : 1,904, 1,913, 1,969, 1,949 (각)

서버 -side 명령

  • node client.js -h http://serveraddress:port -b 클라이언트 측 명령 열 -n 500

B = 10, N = 500 클라이언트가 될 때까지, 다른 10 개 개의 연결을 시도하기 전에 설정된 10 개 개의 연결을 참조한다는 것을 의미 10 * 500 연결이 이루어집니다.

패키지 버전

  • socket.io, socket.io 클라이언트 : 0.9.16
  • 표현 : 3.4.8
+0

아마도 CPU가 병목 현상이라고 가정하면 잘못되었을 것입니다. 실제로로드를 측정 했습니까? 당신의 OS가 ~ 7.8k FD보다 더 많은 것을 처리하지 못하는 것처럼 보입니다. 이 기사를보십시오 : http : //www.cyberciti.biz/faq/linux-maximum-of-open-number-of-open-files/리눅스를 사용한다고 가정합니다. 또한'ulimit -Hn'을 체크하면 사용자가 사용할 수있는 열린 FD의 최대 개수가 표시됩니다. 수정할 수 있습니다. – freakish

+0

@freakish CPU가 내 가정과 달리 병목 현상이 아니 었습니다. 그리고 내 ulimit 값은 65000으로 설정됩니다. (부드럽고 두 가지 모두) – redism

답변

0

CPU는 거의 이러한 상황에서 병목 현상이 없다. 운영 체제에서 허용하는 최대 TCP 연결 수 또는 RAM 제한보다 가능성이 큽니다.

+0

CPU와 RAM 모두 병목 현상이없는 것 같습니다. 그러나 심지어 ulimit이 65000으로 설정되어있어 ~ 7800 개 이상의 연결을 허용하지 않습니다. 내가 살펴 봐야 할 다른 제약이 있습니까? – redism