나는 아주 천천히 그리고 때로는 매달려 달리는 웹 어플리케이션을 가지고있다. 이는보고 및 수정 기능이있는 학교 관련 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 %는 무엇입니까? 정말로 느린 연결을 가진 몇몇 클라이언트가 들어오는 요청 본문을 기다리도록하여 바람둥이 쓰레드를 헛되게 만들 수 있습니까?
누구나 이와 비슷한 내용이 있거나 테스트/문제 해결/해결 방법에 대한 조언이 있으십니까?
전선을 통해 전달되는 데이터 세트의 크기는 어느 정도입니까? – popester
단일 레코드가 서버에서 편집되면 모든 클라이언트가 수정 된 레코드 만 다운로드합니다. 1 또는 2 k. 클라이언트가 재설정되면 학교의 모든 데이터가 다운로드됩니다. 아마도 5MB를 초과 할 수 없습니다. –
모든 데이터를 다운로드하는 것은 상당히 불쾌합니다. 클라이언트가 실제로 모든 데이터를 필요로합니까? 어떤 종류의 페이징을 할 수 있습니까? 또한 클라이언트가 데이터를받는 방법은 무엇입니까? 어떤 종류의 웹 서비스 호출 스크립팅? – popester