knime Java heap space 的解决方法

来源:互联网 发布:上海仙知机器人 编辑:程序博客网 时间:2024/06/10 10:26
今天用Concatenate节点做数据合并的时候,总是到了93%左右就失败,错误记录显示“java heap space”。

以前遇到类似问题我就重启下电脑,关掉不必要的程序,然后再运行,基本都能过,但今天怎么也过不去。没办法,只好借助Google来找找答案。最后在Knime论坛找到了解决方法。

其实java heap space问题,就是Java的堆栈容量不够了,java编程人员应该都比较熟悉吧。我虽然有一点了解,但总是想着如何节约内存给knime用,却不知道knime并不能自动增加堆栈的容量,这个堆栈容量完全取决于程序配置文件的设定。

Knime的配置文件就在主目录,叫knime.ini。关闭knime,用记事本打开knime.ini,找到-Xmx512m(可能不一定是512),这个512m就代表Java的堆栈最大值,这里我改成了1024m,然后再打开knime,运行节点,完全没问题了。

根据Knime网站的说法,还可以同时修改 -XX:MaxPermSize=128m 的128为256等等。但需要注意的是,两个参数之和不能超过物理内存容量。比如我修改后一个是1024m,一个是256m,总和1280m小于我的物理内存容量2048m,那就没问题,否则可能出现进不了knime等错误。

以下为原文:http://tech.knime.org/faq#q4_2

How can I increase the Java Heap Space for KNIME?
In the KNIME installation directory there is a file called knime.ini (under linux it might be .knime.ini). Open the file, find the entry -Xmx512m and change it to -Xmx1024m for example. You may also consider to change the -XX:MaxPermSize=128m option and increase it to 256m or even 512m, depending on your computer's main memory. Note, that you main memory must be at the very least the sum of both values. 

下面再解释下两个参数的含义和区别

-Xmx512m 
表示JVM Heap(堆内存)最大允许的尺寸512MB,按需分配。

-XX:MaxPermSize=128m  指明虚拟机为java永久生成对象(Permanate generation)如,class对象、方法对象这些可反射(reflective)对象分配内存限制,这些内存不包括在Heap(堆内存)区之中。同样是按需分配。单的说,两个参数对应两种不同类型的内存空间,knime运行时会分别用到,现在遇到空间不够了,那就把最大限制调高,但不管怎么调,最后总的空间还是受机器物理内容容量的限制。
原创粉丝点击