WEB
posted by 구름너머 2006. 2. 17. 10:40

ChunkUtil.pdf

www.bea.co.kr 23

Bea Enterprise Solution Technical News

ChunkUtil 의한 WLS 응답 속도 지연

1.제품 : WLS

2.사용 OS : 모든 플랫폼(platform)

3.작성일 : 2002/11/16

4.이슈사항 : 서버로부터 응답 속도가 느려지고, CPU 소모량이 많은 경우에는 먼저 해당 WLS 서버의 thread 들이 수행하는 일을

확인해 보는 것이 좋다. 이를 위해서‘kill -3’ 해당 프로세스에 보내서, 해당 JVM thread dump 확인을

하게 된다.

그런데, dump 내용에서 다음과 같이

"ExecuteThread: '49' for queue: 'default'" daemon prio=5 tid=0x32de7818 nid=0xf18 runnable

[0x345bf000..0x345bfdbc]

at java.net.SocketOutputStream.socketWrite(Native Method)

at java.net.SocketOutputStream.write(SocketOutputStream.java:91)

at weblogic.servlet.internal.ChunkUtils.writeChunkTransfer(ChunkUtils.java:224)

at weblogic.servlet.internal.ChunkUtils.writeChunks(ChunkUtils.java:200)

at weblogic.servlet.internal.ChunkOutput.flush(ChunkOutput.java:274)

at weblogic.servlet.internal.ChunkOutput.checkForFlush(ChunkOutput.java:347)

at weblogic.servlet.internal.MultibyteOutput.write(ChunkOutput.java:467)

at weblogic.servlet.internal.ChunkOutputWrapper.write(ChunkOutputWrapper.java:95)

at weblogic.servlet.internal.ChunkWriter.write(ChunkWriter.java:37)

at java.io.Writer.write(Writer.java:148)

at java.io.PrintWriter.write(PrintWriter.java:208)

at java.io.PrintWriter.write(PrintWriter.java:224)

at java.io.PrintWriter.print(PrintWriter.java:355)

at java.io.PrintWriter.println(PrintWriter.java:492)

at xxx.yy.com.jsp.UvJspBase.popUpErrorPage(UvJspBase.java:1104)

at xxx.yy.com.jsp.ScreenJspBase.service(ScreenJspBase.java:169)

at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:265)

at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:200)

at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:2546)

at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2260)

at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:139)

at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:120)

ChunkUtil 클래스의 writeChunkTransfer( ) 혹은 writeChunkNoTransfer( ) 메소드 호출을 수행하는 thread

많은 경우가 종종 있다.

Technical Tip WEBLOGIC

5.해결안 :JSP 수행을 경우에 브라우저로 보내기 위한 화면을 내부 버퍼에 구성을 하고, 완성이 되면 이를 내려보내게 된다.

그런데, 버퍼의 크기가 default로는 8KB 해당한다. 따라서, 이보다 화면을 내려보내야 경우에는 중간에

해당 버퍼를 flush하는 작업이 일어나게 된다. 이런 flushing 작업은 클라이언트 브라우저로부터 ack 받아야

되므로, IO wait 상태가 발생하게 된다. 이런 과정은 thread 하여금 많은 시간을 대기하게 한다. 이런 대기는 화면

크기가 30KB라면 7 발생하게 되어서 상당한 부하를 있다.

이와 같은 지연 현상을 줄이기 위해서는 화면을 보내는 JSP 대해서는 충분한 버퍼를 사용할 있도록 함으로써

반복적인 flushing 작업을 줄이고, 가능하면 1회의 데이터 전송으로 작업이 끝날 있도록 해야 한다.

먼저 thread dump 내용을 살피시면 해당 JSP페이지를 확인할 있다.

위의 경우는 xxx.yy.com.jsp.ScreenJspBase.service() 호출되고 있으므로, xxx.yy.com.jsp 팩키지의

ScreenJspBase 확인하시면 된다. 그리고, 해당하는 페이지의 크기를 확인하여 충분한 크기의 버퍼를 아래와 같이

설정하면 된다.

<%@ page buffer=”64kb”%>

'WEB' 카테고리의 다른 글

소스보기  (0) 2006.03.04
WLS : 데이터 전송시 성능저하(AIX플랫폼)  (0) 2006.02.17
MS, 오는 4월까지 IE 브라우저 설계변경  (0) 2006.01.25
html태그사전  (0) 2005.10.14
아파치 httpd.conf 환경설정  (1) 2004.12.01