2012-05-15 1 views
0

특성의 많은 도메인 개체의 많은,하지만 더 큰 문제이다 :Grails의 및 최대 절전 모드 - 내가 또 다른 질문에서 해결 문제가 생겼어요

기본 Grails의 봄은 /에서 최대 절전 모드했다 STS를 사용하여 프로젝트 표지. Grails 애플리케이션이로드되면, 100,000 개가 넘는 도메인 객체의 데이터베이스가 메모리에로드 된 것처럼 보입니다. 이것이 Hiberate/ORM 계층이든 아니든, 나는 잘 모른다.

Pre DB domain object load (400 MB start up) 
Post DB domain object load (900 MB start up) 

부트 스트랩 데이터가 없습니다. 상자에서 벗어난 앱 성능은 없습니다. 그냥 깨끗한 시작 및 내 도메인 개체.

모니터를 사용할 수 있지만 같은 대답을 얻습니다. 이것은 구성 인 것으로 보입니다. Grails 내에서 이러한 객체들을 메모리에로드하지 않기 위해 어떻게 Hibernate를 설정할 수 있습니까?

이것은 DataSource.groovy에 파일입니다

dataSource { 
pooled = true 
driverClassName = "com.mysql.jdbc.Driver" 
username = "xxx" 
password = "xxx" 
} 
hibernate { 
cache.use_second_level_cache = false 
cache.use_query_cache = true 
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' 
} 
// environment specific settings 
environments { 
development { 
    dataSource { 
     dbCreate = "update" 
     url = "jdbc:mysql://localhost/mydb" 
    } 
} 
test { 
    dataSource { 
     dbCreate = "update" 
     url = "jdbc:mysql://localhost/mydb" 
    } 
} 
production { 
    dataSource { 
     dbCreate = "update" 
     url = "jdbc:mysql://localhost/mydb" 
    } 
} 
} 

나는 등 파일을 시작하는 미 조정 (부트 스트랩, 소스/최대 절전 모드, 설정, 모든 종류의 시도 때문에 나를 죽이고있다 - 내가 할 수있는 ' 심지어 내가 시도한 모든 다른 것을 기억하지 마십시오).

* 편집 * 내 개체로 eager fetching을 사용하지 않습니다. 게으른 기본값.

답변

3

사전/사후 메모리 번호는 어떻게 받고 있습니까? BootStrap.groovy 파일에 아주 이상한 플러그인이나 무언가가있는 경우를 제외하고는 전체 도메인 객체 세트가 메모리에로드되고 있다는 느낌이 들지 않습니다. 아마

이 정말 그냥 최대 절전 모드에 대한 추적 수준 로깅을 설정하는 것입니다 무슨 일이 일어나고 있는지 확인하는 가장 쉬운 방법 :

trace 'org.hibernate.SQL' 

정말로드이라면 모두가 DB에서 메모리에, 당신이를 볼 수 있습니다 방대한 양의 SQL 쿼리가 앱이 시작될 때 진행됩니다.

더 자세히 조사하려면 JMX Monitoring of hibernate을 켜고 실행중인 grails 인스턴스에 jconsole을 연결하여로드 된 내용과 그렇지 않은 내용을 확인하십시오.

+0

SQL 추적을 사용하는 것이 좋습니다! – loteq

+0

트레이스에 대한 우수한 팁. 나는 그것을 시도 할 것이다. – user82302124