2014-10-19 20 views
0

EDITED春數據其餘部分提供了GC開銷超過

有2個單位用戶和RefSecQuestion鏈接如下 -

內用戶:此變更爲急於解決Bug

@ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "question", nullable = false) 
    public RefSecQuestion getRefSecQuestion() { 
     return this.refSecQuestion; 
} 

Inside RefSecQuestion:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "refSecQuestion") 
public Set<User> getUsers() { 
    return this.users; 
} 

訪問URL -/API/refSecQuestions或/ API /用戶/ 2/refSecQuestions給這個錯誤 -

11:25:14,320 WARN LoadContexts.cleanup():115 - HHH000100: Fail-safe cleanup (collections) : [email protected]b537<[email protected]> 
2014-10-19 11:25:14.522:WARN:oejs.ServletHandler:qtp1075697729-17: 
org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.OutOfMemoryError: GC overhead limit exceeded 
    at org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletionWithError(DispatcherServlet.java:1280) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:958) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:687) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:769) 
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577) 
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223) 
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1125) 
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) 
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) 
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1059) 
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215) 
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110) 
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
    at org.eclipse.jetty.server.Server.handle(Server.java:497) 
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311) 
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:248) 
    at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:610) 
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:539) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: 
java.lang.OutOfMemoryError: GC overhead limit exceeded 
    at org.hibernate.internal.AbstractSessionImpl.generateEntityKey(AbstractSessionImpl.java:327) 
    at org.hibernate.engine.internal.StatefulPersistenceContext.getCollectionOwner(StatefulPersistenceContext.java:694) 
    at org.hibernate.loader.plan.exec.process.internal.CollectionReferenceInitializerImpl.findCollectionOwner(CollectionReferenceInitializerImpl.java:141) 
    at org.hibernate.loader.plan.exec.process.internal.CollectionReferenceInitializerImpl.finishUpRow(CollectionReferenceInitializerImpl.java:87) 
    at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.readRow(AbstractRowReader.java:125) 
    at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:129) 
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:138) 
    at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:102) 
    at org.hibernate.loader.collection.plan.AbstractLoadPlanBasedCollectionInitializer.initialize(AbstractLoadPlanBasedCollectionInitializer.java:100) 
    at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:693) 
    at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:92) 
    at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1897) 
    at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:558) 
    at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:260) 
    at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:554) 
    at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:142) 
    at org.hibernate.collection.internal.AbstractPersistentCollection$1.doWork(AbstractPersistentCollection.java:171) 
    at org.hibernate.collection.internal.AbstractPersistentCollection$1.doWork(AbstractPersistentCollection.java:156) 
    at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:260) 
    at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:155) 
    at org.hibernate.collection.internal.PersistentSet.isEmpty(PersistentSet.java:166) 
    at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler$1.doWithAssociation(PersistentEntityResourceAssembler.java:159) 
    at org.springframework.data.mapping.model.BasicPersistentEntity.doWithAssociations(BasicPersistentEntity.java:337) 
    at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.getEmbeddedResources(PersistentEntityResourceAssembler.java:128) 
    at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.wrap(PersistentEntityResourceAssembler.java:106) 
    at org.springframework.data.rest.webmvc.PersistentEntityResourceAssembler.toResource(PersistentEntityResourceAssembler.java:84) 
    at org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController$1.apply(RepositoryPropertyReferenceController.java:141) 
    at org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController$1.apply(RepositoryPropertyReferenceController.java:110) 
    at org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController.doWithReferencedProperty(RepositoryPropertyReferenceController.java:464) 
    at org.springframework.data.rest.webmvc.RepositoryPropertyReferenceController.followPropertyReference(RepositoryPropertyReferenceController.java:148) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
+0

這個問題似乎是脫離主題,因爲它是一個錯誤報告,而不是一個問題。 – 2014-10-19 09:10:44

+0

有沒有一種解決方法可以避免在Spring數據Rest中出現GC錯誤,我不完全確定GC溢出是否與該錯誤直接相關? – fortm 2014-10-19 09:12:27

+0

不知道,但你提出兩個單獨的問題(可序列化的ID問題和GC問題),沒有提供任何理由認爲它們是相關的。如果您特別關注GC問題,那麼請考慮關注該問題,或者將其連接到可序列化的ID問題。 – 2014-10-19 09:20:59

回答

1

GC overhead limit exceeded意味着你使用CMS垃圾收集器運行時內存不足。這可能是由於內存泄漏或您的應用程序只是擁有比VM選項允許的更大的活動數據集。爲了弄清楚這個問題用

-XX:+HeapDumpOnOutOfMemoryError 

,並可能-XX:HeapDumpPath(檢查Java HotSpot VM Options瞭解更多信息)。然後運行一個工具,如Eclipse MAT來找出問題所在。還有幾種商業工具可用,如Plumbr

+0

我發現當Spring Data REST的結果集非常大時,就會發生OutOfMemory。但是,我所有的存儲庫都在擴展JPARepository。我不明白默認分頁不會如何發生,應該將首頁結果限制爲僅限於 – fortm 2014-10-19 15:10:16

+0

您爲什麼期望分頁發生?你可以發佈你的倉庫嗎? – 2014-10-19 19:30:31

+0

在相關鏈接中添加了存儲庫http://stackoverflow.com/questions/26451920/pagination-in-spring-data-rest-for-nested-resources – fortm 2014-10-20 02:55:21

相關問題