'java.net.SocketException: Broken pipe'에 해당되는 글 1건

  1. 2010.05.11 java.net.SocketException: Broken pipe
01.JAVA/Java2010. 5. 11. 17:43
반응형

####<May 11, 2010 5:26:55 PM KST> <Warning> <HTTP> <kpocws1> <GKA_PA1> <ExecuteThread: '98' for queue: 'weblogic.kernel.Default'> <<anonymous>> <> <BEA-101324> <Some Browsers may fail when both "Content-Disposition" and "Cache-Control" are set.>
####<May 11, 2010 5:31:02 PM KST> <Error> <HTTP> <kpocws1> <GKA_PA1> <ExecuteThread: '98' for queue: 'weblogic.kernel.Default'> <<WLS Kernel>> <> <BEA-101017> <[ServletContext(id=31656334,name=webapp,context-path=)] Root cause of ServletException.
java.net.SocketException: Broken pipe

: 일반적으로 잦은 입출력으로 호출로 발생된다. 처리 중인 요청(또는 응답)을 사용자가 기다리지 않고, '새로고침(또는 종료, 연속 클릭 등)' 를 자주 실행하게 되면, 소켓이 끊어져서 발생된다.


: 재요청에 의한 Socket 끊김.. jihwany 
웹브라우저에서 서버에 연결을하면 
accept된 socket을 HttpThread에 넘기고, 
ThreadPool에서 조건에 맞으면 해당 HttpThread를 기동하게 되어 있는데요..
그래서 HttpThread가 완료되기 전까지 다시 재요청을 하지 않으면 아무 문제 없습니다. 
그런데 HttpThread가 완료되전에 재요청을 하면 문제가 되는군요/

이건 첫번째 요청때 생성된 Socket의 자원을 HttpThread.run()에서 사용하려고 하는 중에, 두번째 요청이 들어오니까 첫번째 요청의 Socket이 끊어져 버리기때문에 생기는 문제 입니다

:위 Broken pipe는 WAS서버에서 결과를 사용자PC로 보내는 과정에서 발생한 것입니다.
앞단에 웹서버가 있다면 WAS에서 웹서버로 보내는 과정에서 일어난 것이구요, 만약 웹서버 없이
WAS(웹로직)이 직접 서비스를 하고 있다면 WAS(웹로직)이 사용자PC에게 보낼 때 발생하는
것이구요.


- java.io.IOException: Broken pipe
  원인: receiver에서 송신받은 데이터를 제때 처리하지 못하는 상황(네트워크가 느리거나 서버의 CPU가 max인 경우 등)에서 sender가 계속 보내는 경우

Broken Pipe의 경우 클라이언트는 계속 해서 데이터를 보내는 것이 아니라 하나의 레코드를 보낸 다음 서버에서 정상적으로 수신했다는 신호를 받고 다시 보내는 형태로 구현하면 된다. 속도가 좀 떨어진다는 단점이....

Posted by 1010