0

在读取和处理大型 XML 文件时,我的 JBOSS 出现问题。

我的硬件:

-OS:Windows 2008 Server R2 Enterprise -CPU:Intel E7210 @ 2.4 Ghz(双核)-RAM:12 GB

我尝试读取大约 370 MB 的 XML 文件。当我在 JBOSS 中的程序正在读取这个文件时,内存使用量增加到大约 5 GB。

但是每次 JBOSS 在读取文件时崩溃并重新启动。日志文件中没有提示,为什么 JBOSS 正在重新启动:

带有 fromHdd.trf 的部分是我开始读取 xml 文件的部分(在 16:46:57,411) 两秒钟后(在 16:48:31,036),jboss 正在重新启动而没有任何错误。

jboss日志的一部分:

    2012-07-09 16:46:51,083 INFO  [de.softproject.integration.engine.X4engine] Started process "iMan_WebConnect/Stammdaten/ERW16/AttributeSets/Process/getAttributeSetsFromCML.wrf".
2012-07-09 16:46:57,411 INFO  [de.softproject.integration.engine.X4ModuleImpl] Executed action "fromHdd.tra" in 6.313 ms.
2012-07-09 16:48:31,036 INFO  [com.arjuna.ats.jbossatx.jta.TransactionManagerService] JBossTS Transaction Service (JTA version) - JBoss Inc.
2012-07-09 16:48:31,036 INFO  [com.arjuna.ats.jbossatx.jta.TransactionManagerService] Setting up property manager MBean and JMX layer
2012-07-09 16:48:31,645 INFO  [com.arjuna.ats.jbossatx.jta.TransactionManagerService] Starting recovery manager
2012-07-09 16:48:31,755 INFO  [com.arjuna.ats.jbossatx.jta.TransactionManagerService] Recovery manager started
2012-07-09 16:48:31,755 INFO  [com.arjuna.ats.jbossatx.jta.TransactionManagerService] Binding TransactionManager JNDI Reference
2012-07-09 16:48:35,926 INFO  [org.jboss.ejb3.EJB3Deployer] Starting java:comp multiplexer

我的猜测:Java 程序使用 saxon 解析器。Java 或 saxon 解析器导致内存错误。

这部分来自文件 wrapper.conf,如果我为 Java 配置了 8GB RAM。

# Java Additional Parameters
wrapper.java.additional.1=-Dprogram.name=run.bat
wrapper.java.additional.2=-Dx4.config.file=../../X4config.xml
wrapper.java.additional.3=-Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl
wrapper.java.additional.4=-Xms128m
wrapper.java.additional.5=-Xmx8192m 
wrapper.java.additional.6=-XX:MaxPermSize=256m
wrapper.java.additional.7=-server
wrapper.java.additional.8=-Dsun.rmi.dgc.client.gcInterval=3600000 
wrapper.java.additional.9=-Dsun.rmi.dgc.server.gcInterval=3600000
wrapper.java.additional.10=-Djava.endorsed.dirs=../lib/endorsed

我该怎么做,以防止 JBOSS 重新启动。希望你有一些想法。

最好的问候 LStrike

PS:是的,我知道,我没有发布任何代码。我无法访问来自Hdd.trf的功能背后的代码,所以我一般尝试得到一些答案。

4

2 回答 2

3

在这一点上,某种“内存不足”问题似乎是最可能的解释,但你真的需要一些证据:

  • 您应该弄清楚如何从 JBoss 中获取更多关于导致重新启动的信息。检查所有日志文件。如果没有相关内容,请更改日志记录设置以增加日志记录量。

  • 您应该考虑由于进程的“ulimit”资源限制或“OOM 杀手”的操作,JBoss JVM 被外部杀死的可能性。您希望在操作系统日志中有一些关于这些的迹象。

你怎么能防止这种情况发生?好吧,我唯一的建议是显而易见的。

  • 增加 JVM 堆大小。(但取决于问题如何导致 JBoss 重新启动,这可能会使事情变得更糟。)

  • 限制输入的大小,或将其分成更小的块。

  • 重写使用 XSLT 以其他方式进行转换的部分。(Saxon 不是解析器。它是一个 XSLT 引擎。)

  • 切换到更高效的 XSLT 引擎。这个 SO 问题的公认答案(什么是最高效的基于 Java 的流 XSLT 处理器?)说 Saxon-SA 在内存使用方面是最有效的。

于 2012-07-09T16:02:23.207 回答
0

似乎来自 Stephen C 的提示有帮助:

  • 增加 JVM 堆大小。(但取决于问题如何导致 JBoss 重新启动,这可能会使事情变得更糟。)

我将 JVM 的大小调整为最小 4 GB,最大为 10 GB。

我已将 wrapper.conf 配置如下:

 # Java Additional Parameters
wrapper.java.additional.1=-Dprogram.name=run.bat
wrapper.java.additional.2=-Dx4.config.file=../../X4config.xml
wrapper.java.additional.3=-Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl
wrapper.java.additional.4=-Xms4096m
wrapper.java.additional.5=-Xmx10240m 
wrapper.java.additional.6=-XX:MaxPermSize=2048m
wrapper.java.additional.7=-server
wrapper.java.additional.8=-Dsun.rmi.dgc.client.gcInterval=3600000 
wrapper.java.additional.9=-Dsun.rmi.dgc.server.gcInterval=3600000
wrapper.java.additional.10=-Djava.endorsed.dirs=../lib/endorsed
wrapper.java.additional.11=-Dcom.sun.management.jmxremote.port=12233
wrapper.java.additional.12=-Dcom.sun.management.jmxremote.authenticate=false
wrapper.java.additional.13=-Dcom.sun.management.jmxremote.ssl=false
wrapper.java.additional.14=-Dcom.sun.management.jmxremote
wrapper.java.additional.15=-Djboss.platform.mbeanserver
wrapper.java.additional.16=-Djavax.management.builder.initial=org.jboss.system.server.jmx.MBeanServerBuilderImpl
wrapper.java.additional.17=-Dorg.tanukisoftware.wrapper.WrapperSimpleApp.maxStartMainWait=120
#wrapper.java.additional.18=-Xss7048k



# Initial Java Heap Size (in MB)
wrapper.java.initmemory=4096

# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=10240

目前我正在处理一个 440 MB XML 文件。内存使用稳定在 8GB 左右。

希望以后能稳定运行。

谢谢你的帮助。

于 2012-07-13T09:27:16.477 回答