이상한 예제를 공유하고 싶습니다. 프로덕션 환경에서 응용 프로그램이 OOM 예외를 throw하는 중, 힙 덤프를 가져 와서 나중에 com.mchange.v2.c3p0.stmt.PerConnectionMaxOnlyStatementCache 인스턴스에 문제가 있음을 분석하기 시작했습니다. 이 개체의 크기는 힙 크기의 약 50 %입니다. 수십억 명의 사용자가 응용 프로그램을 실행하고 서버가 계속해서 다시 작동합니다.c3p0 캐시 개체의 성능 문제 :
이 응용 프로그램은 tomcat 커넥터가 최대 동시 요청 300 개를 허용하고 다음에 c3p0 구성이 실행되는 tomcat에서 실행됩니다.
jdbc.hibernate.c3p0.minPoolSize=2
jdbc.hibernate.c3p0.maxPoolSize=150
jdbc.hibernate.c3p0.maxIdleTime=0
jdbc.hibernate.c3p0.maxStatementsPerConnection=50
jdbc.hibernate.c3p0.numHelperThreads=6
힙 모니터링 도구에서 우리는 org.apache.catalina.loader.WebappClassLoader @ "에 의해로드 된 다음과 같은 메시지"com.mchange.v2.c3p0.stmt.PerConnectionMaxOnlyStatementCache "의
하나 개의 인스턴스를 얻고있다 0x82f1c58 "은 72 970 824 (57,75 %) 바이트를 차지합니다. 메모리 조언 제발
"0x82f1c58 org.apache.catalina.loader.WebappClassLoader @"에 의해로드 "com.mchange.v2.c3p0.stmt.PerConnectionMaxOnlyStatementCache"의 한 인스턴스에 축적된다 : - 는 이유는 무엇 일 수 있습니다 거대한 기억을 취하는이 사건? 올바른 c3p0 구성으로 실행하고 있습니까? 로드가 많은 응용 프로그램에 권장되는 구성은 무엇입니까?
Tomcat을 사용 중이라고하셨습니다. 왜 Tomcat의 연결 풀링 대신 자신의 C3P0을 사용합니까? – jpkrohling
이 매개 변수를 설정해보십시오. –