LiquibasegenerateChangeLog 失败:Java 堆空间

问题描述 投票:0回答:2

当我尝试从 DB2 数据库生成 SQL 数据时,遇到 Java 堆空间问题。大约有 25 个表,大约 1000 条记录。

我使用以下脚本生成变更集数据:

C:\liquibase-3.0.2-bin>liquibase --driver=com.ibm.db2.jcc.DB2Driver \
--classpath="C:\db2jcc.jar" \
--changeLogFile="C:\Liquibase Release\liqui_MYDB_MYSCHEMA_Data.xml" \
--url="jdbc:db2://__ip__here__:9008/MYDB" \
--username="user" \
--password="12345" \
--defaultSchemaName="MYSCHEMA" \
--diffTypes=data  \
generateChangeLog

我尝试通过在 liquibase.bat 文件中设置 JAVA_OPTS 来增加内存,但这没有产生任何解决方案:

  • set JAVA_OPTS="-XX:MaxPermSize=1024m"
  • set JAVA_OPTS="-Xms512m -Xmx1024m"
java heap-memory liquibase
2个回答
3
投票

您不应该遇到 MaxPermSize,因此只需设置更大的 Xmx 标志即可。

添加

--dataOutputDirectory=DIR_YOU_WANT
标志也可能有所帮助。这将导致 Liquibase 以 CSV 文件输出数据,创建该文件所需的内存消耗较少。生成的 XML+CSV 通常也比巨大的 XML 文件更易于管理

类似:

C:\liquibase-3.0.2-bin>liquibase \ 
--driver=com.ibm.db2.jcc.DB2Driver \ 
--classpat h="C:\db2jcc.jar" \ 
--changeLogFile="C:\Liquibase Release\liqui_MYDB_MYSCHEMA_Data.xml" \ 
--url="jdbc:db2://__ip__here__:9008/MYDB" \ 
--username="user" \ 
--password="12345" \ 
--defaultSchemaName="MYSCHEMA" \ 
--diffTypes=data \ 
--dataOutputDirectory=C:\Liquibase Release\liqui_MYDB_MYSCHEMA_Data.out \ 
generateChangeLog

0
投票

此外,您可以直接调用jar文件,在这种情况下您只需添加-Xmx2g属性即可。 -Xmx2g - 2 GB 内存

换句话说:

C:\liquibase-3.0.2-bin>java -Xmx2g -jar liquibase.jar \ 
--classpath h="C:\db2jcc.jar" \ 
--changeLogFile="C:\Liquibase Release\liqui_MYDB_MYSCHEMA_Data.xml" \ 
--url="jdbc:db2://__ip__here__:9008/MYDB" \ 
--username="user" \ 
--password="12345" \ 
--defaultSchemaName="MYSCHEMA" \ 
--diffTypes=data \ 
--dataOutputDirectory=C:\Liquibase Release\liqui_MYDB_MYSCHEMA_Data.out \ 
generateChangeLog

您还可能会收到有关数据库驱动程序的错误,因此您应该添加类似 --driver=com.ibm.db2.jcc.DB2Driver (适用于 Oracle)的内容

© www.soinside.com 2019 - 2024. All rights reserved.