2014-09-03 6 views
0

Spring을 사용하는 WAS 환경 (8.5)의 DB2 데이터베이스에 OpenJPA 2.3.0 (동일한 문제가있는 2.2.0 이전)을 사용하고 있습니다. 문제는 결국 응용 프로그램이 결국 충돌 할 때까지 계속 더 많은 메모리를 사용하는 것입니다.내 JDBCBrokerFactory가 성장하는 이유

메모리 분석기를 (많이) 사용하면 JDBCBrokerFactory가 발생합니다. ConcurrentHashMap (16 개 항목 포함)은 사용량을 감안할 때 손실 된 메모리를 담당합니다. (최대 메모리 1024M, 10 시간의 과도하지만 너무 거친로드 후이 클래스는 400M을 담당하며 MAT 만 지적 함)

환경 (org.springframework.orm. jpa.SharedEntityManagerCreator 및 com.volvo.jvs.runtime.springutils.SpringContextBootstrapper)은 나에게는 놀라운 것이 아니지만 클래스가 성장하지 않거나 필요할 때 더 잘 축소 될 것으로 기대합니다. (JPA 2.2.0에는이 클래스를 유지하는 더 많은 클래스가 있었지만 아직 "우리"클래스는 없습니다.)

당연히이 클래스는 우리가 상호 작용하는 클래스 중 하나가 아닌 OpenJPA 구현 내부 JPA를 사용하는 것이 잘못되었다는 것을 알기가 어렵습니다.

JDBCBrokerFactory로부터의 혼란을 줄이기 위해 개선 할 수있는 것에 대한 아이디어 나 힌트는 대단히 감사하겠습니다.

/마틴

답변

0

당신은지도가 지속적으로 성장하지 않으려면지도에서 코드를 저장 물건, 당신은 결국지도에서 항목을 제거해야하는 경우.

0

응용 프로그램에서 연결이 제대로 정리되지 않는 것 같습니다. 이것이이지도가 무한히 커지는 이유입니다. 연결을 직접 수동으로 청소하거나 Spring과 JPA의 적절한 통합을 권장합니다.

+0

JPA를 사용하는 사용자 지정 쿼리의 경우 수동으로 연결을 관리하지 않으므로 닫을 수있는 것이 없습니다. JPA-xml-configuration이 잘되어 있기를 바랍니다. –

0

응용 프로그램이 EntityManagers를 제대로 정리하고 있는지 확인하십시오. EntityManager의 사용이 끝나면 반드시 닫으십시오.

+0

우리는 주입 된 EntityManagers 만 사용하므로 누수의 소스로 볼 수는 없습니다. –