2013-11-27 5 views
0

다음 기술 (JSF, Spring, Hibernate, MySQL, MongoDB, Elasticsearch, Jetty 서버 및 Tomcat)에 의해 개발 된 웹 애플리케이션에서 작업하고있다. 한 사용자가 응용 프로그램을 사용하는 것을 시뮬레이션하는 스트레스 테스트를 만들었습니다. 테스트 시나리오에서는 4 명의 병렬 사용자에 대해 스트레스 테스트를 실행하고 동시에 5 번째 사용자로 로그인하고 특정 활동에 대한 시스템 응답 시간을 측정합니다. 스트레스 테스트 시간이 T로 실행되지 않는 응답 시간을 제시하면 스트레스 테스트 응답 시간은 5 분 ~ 2xT, 30 분 후에는 5xT, 45 분 후에는 10-15xT입니다.JSF, Spring, Hibernate 애플리케이션 성능 저하

1 시간 후 메모리 힙이 200MB 미만이되고 CPU 사용률이 0 %에 도달 할 때까지 25 분 동안 기다렸다가 성능이 약간 좋아졌지만 너무 많이 (~ 7T)하지 않았습니다. 테스트가 끝난 후 1 시간이 바뀌지 않았습니다.

내 PC의 RAM이 8GB이고 -Xms512m -Xmx4092m -XX : PermSize = 512m -XX : MaxPermSize = 512m로 응용 프로그램을 실행하고 JVisualVM 및 JProfiler에서 찾은 바에 따르면 생각하지 않습니다. 이것은 메모리 누출 문제입니다. 그러나, 나는 그 밖의 무엇이 문제 일 수 있는지 모른다. 거대한 성능 저하가 발생할 수있는 이유가 무엇인지 또는 어디에 찾아야하는지 누군가가 알릴 수 있기를 바랍니다.

미리 감사드립니다.

+0

JProfiler 등의 코드 나 결과가 없으면 어떤 일이 일어나는지 알기가 어렵습니다. gc (너무 많거나 너무 적음), 트랜잭션 설정, 잘못된 JDBC 설정 등에 문제가있을 수 있습니다. –

+0

@M. Deinum은 애플리케이션 프로필을 확인하고 DB 트랜잭션을 열었습니다. 실제로 메모리 상태를 확인하고 있지만 문제가 다른 계층에있을 수 있다는 것을 잊어 버리고 있습니다. –

+0

나는 이러한 전문가가 아니지만 이러한 gc 로그 http://goo.gl/jqWufP에서 문제를 볼 수 없습니다. 데이터베이스 연결은 정상적으로 작동하고 사용 후 모든 연결이 닫힙니다. 테스트 중지 후 메모리가 해제됩니다. –

답변

2

응용 프로그램의 모든 측면을 분석 한 후 Mojarra가 성능 저하의 주요 원인임을 확인했습니다. 스트레스 테스트 후 백엔드 초기화가 동일하게 유지되는 동안 Ajax 게시 후 응답 시간은 더 길었습니다. Mojarra 2.1.9에서 2.2.0으로 옮긴 후 문제는 사라졌으며 JSF 페이지의 복잡성과 Mojarra가 한 페이지에 많은 수의 구성 요소를 처리하는 방식과 관련 있다고 생각합니다.