使用12GB Ram机器的Pentaho OutOfMemory异常

时间:2014-09-16 14:09:19

标签: java out-of-memory pentaho

我刚刚在我的公司实施了Pentaho并将内存设置为12GB。当我们尝试从一个表加载一个1600万行到另一个表时,它会耗尽内存。

我认为Pentaho在执行数据库提交时会清除内存,但似乎没有发生。当它加载大约250万行时会抛出这个异常,这意味着加载1600万我需要一台73Gb的RAM机器? (当然是粗略的数学)

是否有任何参数或配置可以让魔术发生?这个内存问题限制了我们的负载能力(1600万只是其中一个表)。无法相信Pentaho会在没有最终清除缓存的情况下突然爆发内存。

我的文件D:\ Pentaho \ server \ biserver-ee \ tomcat \ bin \ service.bat包含以下行:

"%EXECUTABLE%" //US//%SERVICE_NAME% ++JvmOptions "-Djava.io.tmpdir=%CATALINA_BASE%\temp;
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;
-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties;
-XX:MaxPermSize=256m" --JvmMs 2048 --JvmMx 12288

它与下面的行有什么关系吗?

-XX:MaxPermSize=256m

有人可以解释一下它究竟是什么吗?

提前致谢!

PS:这是我与Pentaho的第一次接触,所以,我很抱歉任何不必要的问题或假设。

2 个答案:

答案 0 :(得分:2)

在MaxPermSize开关上,8之前的Oracle Java版本有一个称为permgen(永久代)的内存区域。

有关详细信息,请参阅this答案。

这可能是内存异常的来源,虽然不了解Pentaho和您的使用情况但很难说这是否是您问题的根源。

答案 1 :(得分:0)

某些ETL步骤必须在开始提供结果之前读取(并因此缓存)所有数据(例如,存储组依据,查找流的流查找)。但是如果你只读(表输入)和写(表输出),数据只是进出,你不需要将整个表放入内存(这对于没用,对吧?)。

-JvmMs 2048 -JvmMx 12288参数看起来很可疑。你试过-Xms2g -Xmx12g吗?