2015-02-06 3 views
0

이클립스 프로젝트의 코드를 jar 파일로 내 보냈습니다. 다른 표준 Java 프로젝트에서이 jar 파일에 액세스하면 5 분 내에 완료됩니다. Google App Engine의 서블릿에서 완료하는 데 거의 한 시간이 걸립니다. 이것은 단지 Google App Engine을 사용하는 기능입니까 아니면 다른 문제가있을 수 있습니까? 데이터 저장소를 업데이트하기 위해 cron 작업과 함께 서블릿을 사용하고 있지만 데이터 저장소에 쓰는 데 걸리는 시간은 전체 실행 시간 중 일부에 지나지 않습니다.Google 애플리케이션 엔진, 가져온 jar가 매우 느리게 실행 중입니다.

코드는 나이브 베이 즈 분류기를 사용하여 문서 관련성이 회사 이름에 대한 뉴스 기사의 많은 양을 태그하고

업데이트. 이것은 프로그램이 필요로하는 기간을 설명하지만 App Engine에서 그렇게 많은 시간을 필요로하는 이유는 아닙니다.

+0

무슨 일이 일어나는지 보려면 프로파일 링해야합니다. 심지어 5 분이라도 Java 코드가 실행되는 데는 매우 오랜 시간이 걸립니다. 무언가를 기다리거나 많은 수의 루프를 실행해야합니다. –

+0

@AndreiVolgin 업데이트 된 질문 – user2644013

답변

1

프로그램을 보지 않고 최적화하기는 어렵지만 여기에 몇 가지 지침이 있습니다.

제한되지 않으면 App Engine의 코드가 어디서든 빠르게 실행됩니다. 데이터 액세스 시간 (기사 읽기 속도), 데이터 쓰기 시간 및/또는 메모리 제한을 조사해야합니다. 당신이 묘사 한 것과 같은 어플리케이션은 많은 메모리를 요구하는 경향이 있습니다.

  1. App Engine 콘솔에서 메모리 통계를 확인할 수 있습니다. 한계에 부딪 치면 더 큰 인스턴스를 사용하거나 처리 부하를 더 작은 청크로 분할 할 수 있습니다.

  2. 개별 작업으로 분할하고 작업 대기열을 사용하는 경우 단일 인스턴스에서 실행되는 여러 스레드를 활용할 수 있습니다. 이것은 일반적으로 데이터 읽기/쓰기가 필요할 때 성능이 크게 향상됩니다.

  3. 데이터를 읽거나 쓸 때 올바른 청크 크기를 사용해야합니다. 예를 들어 Datastore의 쿼리는 기본 청크 크기가 10이지만 1,000까지 증가시킬 수 있습니다. 동일한 로직이 Datastore put에 적용됩니다. 수천 개의 엔티티를 읽고 쓸 때 성능에서 큰 차이를 만듭니다. 이것은 다른 스토리지 옵션에도 적용됩니다. 비교를위한 데이터 포인트로

, 나는에 (추출, 청소, 인덱스 등) (스토리지에서보다 훨씬 느린입니다) 인터넷에서 가져 시간당 문서의 수백만을 처리 할 수 ​​있었다 일반 App Engine 인스턴스.

관련 문제