2012-01-19 3 views
1

30MB의 XML 데이터를 게시해야하는 클라이언트가 있습니다. 데이터는 바이너리 형식이며 크게 암호화되어 있습니다. 내 서블릿이 바람둥이에서 실행중인 명중 클라이언트는 다음 내가 서블릿 문제가 request.getParameter("_xmldata");Tomcat request.getParameter ("_ xmldata")는 30MB 데이터의 경우 25 초가 걸립니다.

을 통해 데이터를 얻을, 그냥 문자열 변수에 30메가바이트 데이터를 이동 주위 25초 걸립니다. 내 머리 속에는 두 가지 질문이 있습니다.

1) 왜 그렇습니까?

2) 어쨌든 내가 이것을 향상시킬 수 있습니까? (떨어져 FTP/SSH를 통해 보낼 수있는 사용자를 받고에서)

서버 환경 : -

  • CPU : 쿼드 코어 제온 5540
  • 서버 메모리 : 4기가바이트
  • 톰캣 힙 : 2기가바이트
  • 을 하드 디스크 : 500GB
+0

일부 코드가 없으면 아무 것도 할 수 없습니다. –

답변

1

나는 getParameter 방법이 여전히 필요한 데이터를 기다리고 있다고 생각합니다. 수신 요청. Wireshark와 같은 것으로 서버를 모니터링함으로써 이것을 확인할 수 있습니다.

모든 필수 HTTP 요청 헤더가 이미 수신되었으므로 서버가 요청 처리를 시작하기에 충분합니다. 그러나 getParameter으로 전화하면 전체 "필드"가 수신 될 때까지 기다릴 가능성이 있습니다. 클라이언트와 서버 사이의 대역폭을 확인하십시오. 나는 그것이 CPU 문제 (당신이 쿼드 코어를 필요로하지 않는다는 것)가 아닌지 의심 스럽다.

요청의 _xmldata 필드 전후에 작은 테스트 텍스트 필드를 배치하여이를 약간 확인할 수 있습니다. 이 필드는 _xmldata 주변에서만 읽습니다. 나는 마지막으로 읽으려는 시도가 당신이 관찰 해 왔던 것과 비슷한 지연에 직면하게 될 것이라고 생각합니다.

(요청 매개 변수를 통해 이진 데이터를 수신하는 방법에 대해 신중해야하며 String 변수로 이동해야합니다. Base64 인코딩과 같은 코드로 인코딩되기를 기대합니다 ...)

+1

네트워크 대역폭도 내가 의심하는 바입니다. 나는 우리의 생산 측면 (무선 네트워크, 즉 15 명의 활성 사용자와 54Mb 대역폭 공유를 의미 함)과 매우 유사한 무선 환경에서 시뮬레이션 테스트를 실시 중이다. 나는 서버 자체에서 시뮬레이션 코드를 실행할 것이다. 빨리 실행되는지 확인하십시오. – Reusable

+0

문제가 발견되었습니다. 확실히 네트워크입니다! localhost 컴퓨터에서 동일한 코드를 테스트했는데 속도는 300ms입니다. 다른 서버의 크로스 오버 케이블을 사용하는 동안에는 겨우 700ms입니다. 서버에서 서버로 테스트 할 때 3 초 밖에 걸리지 않습니다. 우리의 라우터가 클라이언트 컴퓨터와 서버 팜 네트워크 사이의 논리적 구역을 수행하고 있기 때문에 wifi와 서버 간의 주된 이유는 느립니다. 병목 현상은 실제로 라우터에서 발생합니다. – Reusable