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)。2 秒後 (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 パーサーが原因でメモリー障害が発生します。

この部分は、Java に 8 GB の RAM を構成したファイル 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=-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: はい、わかっています。コードを投稿していません。関数 fromHdd.trf の背後にあるコードにアクセスできないので、一般的な回答を得ようとします。

4

2 に答える 2

3

この時点で、ある種の「メモリ不足」の問題が最も可能性の高い説明のように思えますが、実際にはいくつかの証拠が必要です。

  • 再起動の原因について、JBoss からさらに情報を取得する方法を理解する必要があります。すべてのログ ファイルを確認します。関連するものが何もない場合は、ロギング設定を変更してロギングの量を増やします。

  • プロセスの「ulimit」リソース制限、または「OOM killer」のアクションが原因で、JBoss JVM が外部で強制終了されている可能性を考慮する必要があります。オペレーティング システムのログには、これらの兆候がいくつかあるはずです。

どうすればこれを防ぐことができますか? まあ、私が持っている唯一の提案は明白なものです。

  • JVM ヒープ サイズを増やします。(ただし、JBoss がどのように再起動するかによっては、状況が悪化する可能性があります。)

  • 入力のサイズを制限するか、小さなチャンクに分割します。

  • XSLT を使用している部分を書き直して、別の方法で変換を行います。(Saxon はパーサーではありません。XSLT エンジンです。)

  • より効率的な XSLT エンジンに切り替えます。この SO の質問に対する受け入れられた回答 ( What is the Most Efficient Java-Based streaming XSLT Processor? ) は、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 に答える