如何修复 Talend 中的 Java 堆 space 错误?
How to fix Java heap space error in Talend?
我有一个 ETL 流经 talend
那里:
- 使用作业从远程服务器读取压缩文件。
- 将这些文件解压缩并通过作业将它们解析到 HDFS 中。作业内部存在架构检查,因此如果不是
我的问题是 TAC 服务器因为这个错误而停止执行:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.talend.fileprocess.TOSDelimitedReader$ColumnBuffer4Joiner.saveCharInJoiner(TOSDelimitedReader.java:503)
at org.talend.fileprocess.TOSDelimitedReader.joinAndRead(TOSDelimitedReader.java:261)
at org.talend.fileprocess.TOSDelimitedReader.readRecord_SplitField(TOSDelimitedReader.java:148)
at org.talend.fileprocess.TOSDelimitedReader.readRecord(TOSDelimitedReader.java:125)
....
是否有任何选项可以自动避免和处理此错误?
导致此错误的文件很少,但我想为更多类似情况找到解决方案。
在 TAC Job Conductor 中,对于选定的作业,您可以添加 JVM 参数。
添加-Xmx参数来指定最大堆大小。默认值取决于各种因素,如 JVM release/vendor、机器的实际内存等......在您的情况下,java.lang.OutOfMemoryError: Java heap space
显示默认值不足以完成此作业,因此您需要覆盖它。
例如,指定 -Xmx2048m
为 2048Mb 或 2gb
@DrGenius Talend 具有基于 java 的环境,并且在初始化期间会授予一些默认的 jvm 堆,就像任何 java 程序一样。 Talend 的默认值 - Min:256MB (xms) & max:1024MB.. 根据您的工作要求,您可以设置 min/max jvm 的范围,例如最小 512 mb 和最大 8gb..
这可以在作业 运行 选项卡 - 高级设置中修改。即使这也可以参数化,并且可以使用在 env 中设置的变量覆盖。可以从作业构建中看到确切的值 -> _run.sh ..
但请注意不要将高设置得太高,以免同一服务器上的其他作业 运行ning 耗尽内存。
有关堆错误和如何调试问题的更多详细信息:
https://dzone.com/articles/java-out-of-memory-heap-analysis
我有一个 ETL 流经 talend
那里:
- 使用作业从远程服务器读取压缩文件。
- 将这些文件解压缩并通过作业将它们解析到 HDFS 中。作业内部存在架构检查,因此如果不是
我的问题是 TAC 服务器因为这个错误而停止执行:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at org.talend.fileprocess.TOSDelimitedReader$ColumnBuffer4Joiner.saveCharInJoiner(TOSDelimitedReader.java:503) at org.talend.fileprocess.TOSDelimitedReader.joinAndRead(TOSDelimitedReader.java:261) at org.talend.fileprocess.TOSDelimitedReader.readRecord_SplitField(TOSDelimitedReader.java:148) at org.talend.fileprocess.TOSDelimitedReader.readRecord(TOSDelimitedReader.java:125) ....
是否有任何选项可以自动避免和处理此错误? 导致此错误的文件很少,但我想为更多类似情况找到解决方案。
在 TAC Job Conductor 中,对于选定的作业,您可以添加 JVM 参数。
添加-Xmx参数来指定最大堆大小。默认值取决于各种因素,如 JVM release/vendor、机器的实际内存等......在您的情况下,java.lang.OutOfMemoryError: Java heap space
显示默认值不足以完成此作业,因此您需要覆盖它。
例如,指定 -Xmx2048m
为 2048Mb 或 2gb
@DrGenius Talend 具有基于 java 的环境,并且在初始化期间会授予一些默认的 jvm 堆,就像任何 java 程序一样。 Talend 的默认值 - Min:256MB (xms) & max:1024MB.. 根据您的工作要求,您可以设置 min/max jvm 的范围,例如最小 512 mb 和最大 8gb..
这可以在作业 运行 选项卡 - 高级设置中修改。即使这也可以参数化,并且可以使用在 env 中设置的变量覆盖。可以从作业构建中看到确切的值 -> _run.sh .. 但请注意不要将高设置得太高,以免同一服务器上的其他作业 运行ning 耗尽内存。
有关堆错误和如何调试问题的更多详细信息: https://dzone.com/articles/java-out-of-memory-heap-analysis