2009-10-26 1 views
0

나는 아주 천천히 그리고 때로는 매달려 달리는 웹 어플리케이션을 가지고있다. 이는보고 및 수정 기능이있는 학교 관련 Wicket 앱이며 자동화 된 클라이언트가 HTTPS를 통해 데이터를 가져 오거나 게시하는 데 사용되는 서블릿입니다.Tomcat 성능 문제

많은 편집/업로드/다운로드가 진행되는 바쁜 시간에 앱이 부진하고 응답하지 않습니다. 내가 Wicket "PageMap 여전히 잠겨"오류가 발생합니다. Tomcat은 계속 따라 다니고있는 것처럼 보입니다. 메모리 사용량은 약 50M 정도입니다.

는 좀 프로파일 정보를 얻을 수 YourKit을 설정하고 바쁜 기간 동안 톰캣 CPU 시간의 81 %가 여기에 소요되는 것을 발견 :

이 응용 프로그램에서
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run() 
org.apache.jk.common.ChannelSocket$SocketConnection.runIt(Object[]) 
org.apache.jk.common.ChannelSocket.processConnection(MsgContext) 
org.apache.jk.common.ChannelSocket.receive(Msg, MsgContext) 
org.apache.jk.common.ChannelSocket.read(MsgContext, byte[], int, int) 
java.io.BufferedInputStream.read(byte[], int, int) 
java.io.BufferedInputStream.read1(byte[], int, int) 
java.io.BufferedInputStream.fill() 
java.net.SocketInputStream.read(byte[], int, int) 
[Wall Time] java.net.SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int) 

내가 약 250 클라이언트 폴링있어 SSL을 통한 서버가 매 30 초마다 업데이트를 요청합니다. 대부분의 경우, 이것은 빈 응답을 신속하게 반환합니다. 때로는 DB 활동이 갑자기 끊어지며 전체 데이터 (수 MB)가 클라이언트로 다시 전송 될 수 있습니다.

그럼이 활동의 ​​81 %는 무엇입니까? 정말로 느린 연결을 가진 몇몇 클라이언트가 들어오는 요청 본문을 기다리도록하여 바람둥이 쓰레드를 헛되게 만들 수 있습니까?

누구나 이와 비슷한 내용이 있거나 테스트/문제 해결/해결 방법에 대한 조언이 있으십니까?

+0

전선을 통해 전달되는 데이터 세트의 크기는 어느 정도입니까? – popester

+0

단일 레코드가 서버에서 편집되면 모든 클라이언트가 수정 된 레코드 만 다운로드합니다. 1 또는 2 k. 클라이언트가 재설정되면 학교의 모든 데이터가 다운로드됩니다. 아마도 5MB를 초과 할 수 없습니다. –

+0

모든 데이터를 다운로드하는 것은 상당히 불쾌합니다. 클라이언트가 실제로 모든 데이터를 필요로합니까? 어떤 종류의 페이징을 할 수 있습니까? 또한 클라이언트가 데이터를받는 방법은 무엇입니까? 어떤 종류의 웹 서비스 호출 스크립팅? – popester

답변

0

테스트 환경을 설정하고 부하 테스트로이를 재현 해보십시오.
그런 식으로 원인을 찾아 낼 수 있습니다. 그렇지 않으면 너무 많은 요소가 있습니다.
또한이 방법을 사용하면 prod env를 위험에 빠뜨리지 않고 수정을 시도 할 수 있습니다.

+0

수표 해 주셔서 감사합니다 - 행운을 빌어 요! – thethinman

0

아마도 메모리 사용이 원인 일 수 있습니다.
Java 프로세스의 메모리 사용량을 확인하여 얼마나 많이 발생하는지 확인해야합니다.
충분하지 않으면 Tomcat에 대해 Xmx jvm 매개 변수를 설정해야합니다.

+0

오늘 테스트를 통해 JPA 엔티티 캐시 크기가 증가했기 때문에 GC가 안정적임을 알 수 있습니다. 앱에서 약 1.1GB의 RAM을 사용 중입니다. –