C/S 기반 온라인 게임 프로젝트에서 네트워크 전송을 위해 TCP를 사용합니다. Libevent을 포함하고 네트워크 I/O를 자동으로 처리하는 각 연결에 bufferevent를 사용합니다.네트워크가 바쁠 때 매우 높은 대기 시간, TCP, libevent
이전에는 잘 작동했지만 지연 문제는 최근에 표면에 나타납니다. 네트워크를보다 효율적으로 사용하기 위해 스트레스 테스트를 수행하면 대기 시간이 수초 또는 그 이상으로 매우 길어집니다. 서버는 혼란 상태로 싱크 :
평균 CPU 사용량이 감소- (0 % -60 % -0 % -60 % 반복, 대기 무엇인가?) 순 트래픽 (nethogs)
- 감소
- 아직 서버 살아 그것은 뭔가처럼 보인다 (NETSTAT & tcpdump를)
에 연결된 클라이언트는 마술 아래 모든 시스템을 둔화하지만 서버에 새 연결 시간 종료 대응했다.
프로토콜을 UDP로 변경했을 때, 동일한 상황에서 잘 작동합니다. 명백한 대기 시간이없고 시스템이 빠르게 실행됩니다. 순 트래픽은 약 3M/S입니다.
프로젝트가 인트라넷에서 실행 중입니다. 또한 최대 다운로드 속도, 거의 18M/S를 테스트했습니다.
나는 Libevent의 헤더 파일과 ducumentations의 일부를 연구하여 모든 연결에 속도 제한을 설정하려고했습니다. 몇 가지 개선 사항을 수행했지만 몇 가지 다른 구성을 시도했지만 문제를 완전히 해결하지는 못했습니다. 여기 내 매개 변수가 있습니다 : read_rate 163840, read_burst 163840, write_rate 163840, write_burst 163840, tick_len 500ms.
도움 주셔서 감사합니다.
정말 감사드립니다. 정말 고마워요. wireshark를 통해 네트워크 캡처를 얻으려는 귀하의 충고를 따랐습니다. 180 초 동안 총 312788 프레임을 얻었습니다. 37 클라이언트에서 서버로의 중복 ACK, 27 서버에서 클라이언트로의 재전송. 입출력 그래프 또한 매우 일관성이 없으며 대개 94KB/S이며 갑자기 일정한 시간 간격으로 4040 ~ 5586KB/S로 급상승합니다. 평균 시간 간격은 약 7 초이며 시간이 지남에 따라 간격이 길어지고 길어집니다. 즉 IO 그래프의 일관성이 떨어지고 있습니다. – walter
@walter 안녕하세요. 캡처를 어딘가에 넣을 수 있다면 기꺼이 받아 볼 수 있습니다. 네트워크 캡쳐에서 어떤 일이 일어나고 있는지 파악할 수있는 것은 실제 스킬이며, 디버거를 사용하는 것이 좋습니다. 하지만 투자 가치가있는 매우 가치있는 기술이 될 수 있습니다. –
이메일 주소를 알려주시겠습니까? 쉽게 얻을 수있는 클라우드 서비스에 파일을 업로드하는 것이 조금 어렵습니다. 외국 웹 사이트를 탐색하는 속도가 너무 느립니다. – walter