0

这是异常详细信息:-

java.lang.OutOfMemoryError: Java heap space
        at com.mysql.jdbc.Buffer.<init>(Buffer.java:57)
        at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:2087)
        at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:3549)
        at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:489)
        at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:3240)
        at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:2411)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2834)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2838)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2082)
        at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2212)
        at sun.reflect.GeneratedMethodAccessor99.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122)
        at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
        at com.sun.proxy.$Proxy168.executeQuery(Unknown Source)
        at org.hibernate.loader.Loader.getResultSet(Loader.java:1978)
        at org.hibernate.loader.Loader.doQuery(Loader.java:829)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
        at org.hibernate.loader.Loader.loadCollectionSubselect(Loader.java:2242)
        at org.hibernate.loader.collection.SubselectOneToManyLoader.initialize(SubselectOneToManyLoader.java:77)
        at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:622)
        at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:82)
        at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1606)
        at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:379)
        at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:112)
        at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:137)
        at org.hibernate.collection.internal.PersistentBag.isEmpty(PersistentBag.java:249)
        at com.vms.business.SupplierSearchService.fetchTopFiveAssociatedSuppliersList(SupplierSearchService.java:369)
        at com.vms.business.SupplierSearchService$$FastClassBySpringCGLIB$$c4e470d2.invoke(<generated>)
        at org.springframework.cglib.proxy.Meth

odProxy.invoke(MethodProxy.java:204)

这是我遇到异常的 Hibernate 查询:- **注意:- ** 当我使用带有相同数据的 My SQL 5.1 时,相同的查询效果很好。当我使用 My SQL 5.7.23 RDS 连接时,还有一件事,整个应用程序变慢了。新 RDS 的配置比 5.1 My SQL RDS 服务高 4 倍,但仍然报错。

这是查询: -

Session session = em.unwrap(Session.class);
Criteria criteria = session.createCriteria(Orgassociation.class, "orgassociation");
criteria.createAlias("orgassociation.organization", "associatedOrgs");

Criteria userCriteria = session.createCriteria(User.class, "user");
userCriteria.add(Restrictions.eq("user.userId", userId));
User user = (User) userCriteria.uniqueResult();
criteria.add(Restrictions.eq("orgassociation.organization1.organizationId",
user.getOrganization().getOrganizationId()));
criteria.add(Restrictions.eq("associatedOrgs.orgType", VMS_CONSTANTS.DB_CONSTANTS.EMPLOYER_AND_SUPPLIER));
criteria.addOrder(Order.desc("orgassociation.orgAssociationId"));
criteria.setMaxResults(5);

@SuppressWarnings("unchecked")
List<Orgassociation> orgList = criteria.list();
4

1 回答 1

0

您需要附加 Java 分析器 (VisualVM) 或您的工具包并分析您的堆以了解哪些对象实际上导致了这种情况。很可能某些客户端 sdk 合同被破坏,导致大量 java 对象在没有 GC 的情况下散落。

于 2019-02-20T16:23:17.193 回答