리모트 서버간의 read timeout 문제입니다.
안녕하세요, 프로그래밍을 하다 막히는 부분이 있어 글을 올립니다.
회사에 리모트 시스템 간의 트래픽 문제입니다.
클라이언트와 서버 사이에는 128K 의 전용선을 쓰고 있습니다.
클라이언트 ----------------- 서버
800 bytes ->
<- 800 bytes
한번의 트랜잭션에는 각각 800 bytes 씩 주고 받습니다. (tcp socket)
스트레스 테스트를 위하여 1초마다 10건씩 주고 받으면,
한 두 건씩 서버쪽에서 read timeout이 나고 이로인해 소켓이 끊어집니다.
800 * 2 * 10 = 16000 = 16K/sec 정도 인데 말입니다.
read timeout은 select를 이용하여 2초로 잡아주었습니다.
그리고 정해진 길이를 다 읽을 때 까지 while문을 돌며 select 합니다.
그리고 가끔 클라이언트에서 connect syn ack를 받지 못하여 connect timeout도 발생합니다.
NON BLOCKING으로 2초로 select 해 주었습니다.
어플리케이션에 문제가 있는 걸까요?
아니면 장비쪽에 문제가 있는 걸까요?
아니면 저 정도가 정상인가요.
test 할 수 있는 방법이나, 해결책이 있으면 알려주십시요.
참고로 서버와 클라이언트 모두 prefork Multithreaded 방식입며,
fork는 10개 thread는 제한을 두지 않고 process가 accept 한 후에
thread를 하나 생성하여 job을 주는 형식입니다.
c언어를 사용하였고,
플랫폼은 HP-UX 와 Solaris 입니다.
그리고 이건 여담이지만,
accept는 3way handshake가 끝나기 전에 블락이 풀리더군요.
connect로 부터 첫번째 syn을 받은 후에 바로 말입니다.
댓글 달기