permsize 1024M和堆大小2048M的内存不足错误,对于在XPL中for-each循环内部处理的XML,每个在磁盘上大小约为4.5 MB

时间:2011-06-02 12:41:25

标签: orbeon

我有一些for-each循环,我用它来迭代配置XML的元素,这些元素的大小非常小(磁盘上为2 KB),以动态地到达源URL和目标URL。然后,我使用URLGenerator从源URL检索数据(因为它执行流式传输)并使用XForms提交处理器将其加载到XML数据库。源URL和目标URL是动态计算的,检索和加载发生的最里面的循环总共发生了大约32次,每次使用大约4.5 MB的XML文件(最大约6 MB,最小几KB) )。每次我尝试这个时,我都会因运行permgen的Tomcat和慷慨分配的堆大小而出现内存错误,JVM是32位,OS是32位;我想要摆脱这种内存不足的错误:

  1. 我原以为单独的XForms提交将是单独的事务,因此不会累积导致内存不足的问题
  2. 有没有办法使用XForms提交处理器执行流加载,而不是在内存中创建完整文档?
  3. 我不知道这是否会有所帮助,但有没有办法在Orbeon中进行积极的垃圾收集,这样我就不会出现内存不足问题?
  4. 如果需要,我可以在这里发布代码(对于XPL)。

    Source code(回复要求的评论)

1 个答案:

答案 0 :(得分:0)

  1. 如果你在循环中运行oxf:xforms-submission,它们将独立运行,并且在循环中上传30个文档应该只占用最大文档所需的内存。
  2. XForms提交需要在内存中包含完整的文档才能上传它;它不支持流式传输(与oxf:url-generator不同)。
  3. 默认的VM pergen设置通常太低,因此我建议您尝试increase your permgen space