如何解决如何解决 Azure for PostgreSQL 中的内存不足错误
我在一个项目中工作,该项目从数据库中提取一百万条数据,并将该数据转换为 csv 文件以供下载。我使用的数据库是 Postgresql,我将它部署到 AKS(Azure kubernetes)。该代码在我的本地工作正常。我正在从 AKS 使用的本地连接同一个数据库。但是当我尝试在 AKS 中执行代码时,我总是得到
java.lang.OutOfMemoryError: Java heap space] with root cause
java.lang.OutOfMemoryError: Java heap space
at org.hibernate.type.descriptor.sql.VarcharTypeDescriptor.getExtractor(VarcharTypeDescriptor.java:59) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:253) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:249) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
at org.hibernate.loader.custom.ScalarResultColumnProcessor.extract(ScalarResultColumnProcessor.java:54) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
at org.hibernate.loader.custom.ResultRowProcessor.buildresultRow(ResultRowProcessor.java:83) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
at org.hibernate.loader.custom.ResultRowProcessor.buildresultRow(ResultRowProcessor.java:60) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
at org.hibernate.loader.custom.Customloader.getResultColumnorRow(Customloader.java:412) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
at org.hibernate.loader.Loader.getRowFromresultSet(Loader.java:775) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
at org.hibernate.loader.Loader.getRowsFromresultSet(Loader.java:1044) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
at org.hibernate.loader.Loader.processResultSet(Loader.java:995) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
at org.hibernate.loader.Loader.doQuery(Loader.java:964) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:350) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
at org.hibernate.loader.Loader.doList(Loader.java:2887) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
at org.hibernate.loader.Loader.doList(Loader.java:2869) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2701) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
at org.hibernate.loader.Loader.list(Loader.java:2696) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
at org.hibernate.loader.custom.Customloader.list(Customloader.java:338) ~[hibernate-core-5.4.21.Final.jar!/:5.4.21.Final]
at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java
我正在发布执行的代码
Query query = entityManager.createNativeQuery(sqlQuery);
List<Object[]> objectList = query.getResultList();
objectList.forEach(glObject -> {
myEntity entity = myEntity.builder()
.supl_num(glObject[0])
.detail(glObject[1])
...............
.build();
myEntityList.add(entity);
});
AKS 部署配置
...........
ports:
-containerPort: 80
resources:
requests:
cpu : 75m
memory:256Mi
limits:
cpu:1
memory: 2Gi
我不明白为什么这一次又一次地造成
解决方法
在您的 JDBC URL 中使用 defaultRowFetchSize
连接参数,以便驱动程序分块而不是一次获取数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。