2009-12-11 6 views
28

Help! Grails에 큰 루비 앱을 포팅하는 중이지만, Grails의 시작은 2 분 이상 걸립니다.Grails 시작이 느립니다.

이미 dbCreate를 "읽기"로 설정했습니다. 내 하이 엔드 듀얼 프로세서 데스크톱 창 상자에서 Grails에 필요한 RAM (1 기가)이 제공되도록했습니다. 플러그인이 설치되어 있지 않습니다. 루비 클래스였던 170 개의 도메인 클래스가 있습니다.

시작할 때 "Running Grails App .."행을 인쇄 한 다음 "Server running"행을 인쇄하기 전에 오랜 시간 동안 응답하지 않습니다.

나는 단지 내 모든 id를 bigints로 마이그레이션 한 것을 수행했습니다. 그게 문제를 악화시킨 것 같습니다. 이제 시작하는 데 약 10 분이 걸립니다.

저는 grails에 처음 왔으므로 시작시 이벤트를 기록 할 위치와 내용에 대한 몇 가지 자세한 정보를 제공해 주시겠습니까? VM을 프로파일 링하는 것과 관련해서는 자바를 많이 사용한 지 몇 년이 지났습니다. 지금 가장 좋은 프로파일 링 도구로 추천 할만한 것은 무엇입니까?

Grails 시작을 빠르게하려면 어떻게해야합니까?

답변

10

불행히도, 이미 너무 많이 할 수 있는지 잘 모르겠습니다. 알다시피, 시작될 때 모든 플러그인 분석 /로드, 도메인 객체에 동적 메소드 추가, Groovy의 전반적인 동적 특성으로 많은 일이 계속되고 있습니다.

사용중인 버전이 확실하지 않지만 1.2로 시동 할 때 의존성 검사 기능을 끄도록 요청했습니다. 시작 시간에 많은 시간을 추가하기 때문입니다.

위의 내용이 도움이되지 않는다는 것을 알고 있으므로 아마도 다음과 같이됩니다. 내 응용 프로그램을 몇 가지 플러그인으로 나눕니다. 하나는 도메인 객체 용, 하나는 그래프 기능 용, 다른 하나는 Excel 가져 오기 용, 다른 하나는 필요한 UI 구성 요소 용입니다. 시작 시간이 느리기 때문에 그 일을하지는 못했지만 장점은 모든 것을 통합하기 전에 시스템의 각 부분을 서로 별도로 테스트 할 수 있다는 것입니다.

나는 적어도 10 개의 새로운 도메인 객체를 포함하는 새로운 기능을 추가하려고하고 있으며, 핵심 애플 리케이션과 상호 작용해야하는 몇 가지 객체에 대한 스텁을 가지고 별도의 플러그인으로 개발하고 있습니다. 따라서 시작 시간을 줄이고 내 코드를 더 잘 분리 할 수 ​​있습니다.

그래서 옵션이 있다면 별도로 작업하여 별도로 작업하면 문제가 다소 완화됩니다. 또한 소규모 구성 요소를 별도로 작업하거나 모듈화를 개선하는 등의 측면에서 다른 이점도 있습니다.

희망이 있습니다.

1

이 문제를 해결하기 위해 Grails 이외의 다른 손잡이가 있는지 알고 싶을 수도 있습니다.

성능 문제로 사용해 보셨습니까? 상자 성능을 살펴보고 병목 현상이 무엇인지 찾으십시오. 그것은 CPU입니까? 디스크 읽기 문제입니까? 프로파일 러를 VM에 연결하고 시작 시간의 대부분을 사용하고있는 것을 찾을 수 있습니까?

3

도메인 클래스는 상당히 큽니다. 그러나 2 분은 여전히 ​​나에게 너무 길어 보입니다. 플러그인을 많이 설치 했습니까? 잠재적으로 너무 자세한 디버그 설정?

새로운 grails 앱을 만들었고 모든 도메인 객체 (및 도메인 객체가 실제로 작동해야하는 플러그인의 하위 집합)에 복사 한 시간이 얼마나 걸릴지 궁금합니다. 시작한다.

가능한 경우 물건을 분리하는 것에 대한 Jean의 제안은 좋은 것입니다. 우리가 도메인 플러그인을 가지고있는 이전 프로젝트와 비슷한 것을 했었고 다른 모든 애플 리케이션은 모두 그 도메인 플러그인에 의존합니다.

또한 grails events을 사용하여 시작할 때 타이밍 정보를 기록하여 병목 현상이 어디에 있는지 확인할 수 있습니다. "플러그인 설치 (PluginInstalled)"이벤트 타이밍은 좋을 것입니다. 최대 절전 모드 플러그인이 다른 플러그인과 함께 잡힐 것이라고 생각합니다.

2

종속성 문제가있을 수 있습니다. 사용하는 플러그인이 'open ended'의존성이있는 maven의 라이브러리에 의존하는 경우, grails는 해당 범위에서 최신 버전이 다운로드 될 때마다 이동하여 살펴볼 것입니다. 나는 왜 누군가가 이것을 이렇게 지정할 것인지 전혀 모른다. 그것은 신뢰할 수없는 행동으로 이어질 것 같습니다. 필자는 아마존의 클라우드와 대화하는 플러그인에서 자연스럽게 사용되는 Amazon의 java aws 라이브러리를 사용하고있다.

http://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk/1.2.10

참고 해당 종속성 중 일부는 다음과 같이 얼마나

org.apache.httpcomponents HttpClient를 [4.1, 5.0)

그 때마다, Grails의 새 버전을 찾는 것 같습니다 (그리고 다운로드가 있다면,이 시간에 실행했을 때 httpclient의 4.2-alpha1이 내려 왔음을 알았습니다). 플러그인에서 해당 종속성을 제거하고 수동으로 lib 디렉토리 폴더에 필요한 라이브러리를 추가함으로써

, 나는 < 초

0

에> 30 초에서 내 시작 시간을 단축 당신은 서블릿에 더 배치를 위해 이와 같은 기초를 시도 원하는 컨테이너 또는 적절한 .war 부트 스트랩?

grails -Ddisable.auto.recompile=true run-app 

grails run-war 

grails war 
관련 문제