【问题标题】:Pentaho OutOfMemory Exception with a 12GB Ram Machine12GB Ram 机器的 Pentaho OutOfMemory 异常
【发布时间】:2014-11-10 08:05:53
【问题描述】:

我刚刚在我的公司实现了 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,所以,对于任何不必要的问题或假设,我深表歉意。

【问题讨论】:

  • 缺少一些重要信息: 1. 您使用的是哪个 JVM? 2. 你得到的确切错误是什么?
  • 在询问涉及异常的 Java 问题时,始终在问题中包含堆栈跟踪。 --JvmMS 和 --JvmMX 标志是 Pentaho 特有的吗?我问是因为那不是用于在 JVM 上设置内存的标志。
  • (Oracle)JVM 的标志是 -XmxN。 N 是带有可选后缀 k (kilo) 和 m (mega) 的大小。没有后缀默认为字节。那可能是--JvmMx 12288m 吗?
  • @UwePlonus 它抛出的 Java 错误是 java.lang.OutOfMemoryException,而我使用的 JVM 是 7 (build 1.7.0_55-b13)。
  • @PeterMmm 这是问题的一部分...我可以更改,但不确定是否应该更改。 :)

标签: java out-of-memory pentaho


【解决方案1】:

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

更多详情请参阅this 答案。

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

【讨论】:

    【解决方案2】:

    某些 ETL 步骤必须在开始给出结果之前读取(并因此缓存)所有数据(例如,内存分组依据、查找流的流查找)。但是如果你只读(表输入)和写(表输出),数据只是进进出出,你不需要把整个表都塞进内存(那没什么用,对吧?)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-28
      • 2018-06-18
      • 2015-04-25
      • 2016-04-26
      • 2014-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多