Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

Satellite サーバーが最新のエラータパッチまたはパッケージアップデートをクライアントに送らず、Taskomatic および tomcat の java ヒープダンプ で "OutOfMemoryError" が発生する

Solution Verified - Updated -

Environment

  • Red Hat Satellite 5.x

Issue

  • Red Hat Satellite 5.6 サーバーで java ヒープダンプが生成されるため、Satellite web インターフェイスで 503 errors エラーが発生し、受信箱がいっぱいになります。
  • ヒープダンプがシステムの /usr ディレクトリーに保存されるため、root ファイルシステムがいっぱいになります。
  • サーバーで taskomatic または tomcat の "Out of Memory" エラーが発生するため、クライアントが同期に失敗し yum でアップデートしたり、Satellite サーバーから最新のエラータパッチを取得したりすることができません。
  • Satellite サーバーを 5.5 または 5.6 にアップグレードするとサーバーが遅くなるかメモリが枯渇する例外が発生します。
  • クライアントシステムをアップデートしようとすると、Satellite から "Error while executing packages action: empty transaction" メッセージを受け取ります。
  • OOM 例外が発生したため、Satellite サーバーが yum リポジトリと同期しません。
  • Taskomatic ログに java.lang.OutOfMemoryError エラーが記録されます。
  • Catalina.outERROR com.redhat.rhn.common.messaging.ActionExecutor - java.lang.OutOfMemoryError エラーが記録されます。

Resolution

  • エラータ RHBA-2014-1651 で対応された問題があります。このエラータを適用してください。

  • Satellite 5.5 またはマイナーバージョンを実行している場合は、以下の回避策を適用できます。

メモリーに追加で適用できる回避策:

  • /usr/share/rhn/config-defaults/rhn_taskomatic_daemon.conf に新しい Taskomatic のメモリーパラメーターの最小値および最大値を再設定する必要があります。Bugzilla#1037708 が作成されており、これらのデータを /etc/rhn/rhn.conf に追加する機能について対応しています。

  • taskomatic JVM の最大ヒープサイズを 512Mb から 1.3Gb に増加すると、ヒープダンプは発生しません。

  • /etc/rhn/default/rhn_taskomatic_daemon.conf で以下の値を確認してください。 (注意: Satellite 5.5 および 5.6 では、この設定ファイルは /usr/share/rhn/config-defaults/rhn_taskomatic_daemon.conf にあります。)

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

# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=512
  • wrapper.java.maxmemory の値を 1.3Gb に変更します。必要な場合は、負荷に応じてメモリーを追加することができます。ただし、システムに利用可能なメモリーが存在することを確認してください。
# Initial Java Heap Size (in MB)
wrapper.java.initmemory=256

# Maximum Java Heap Size (in MB)
wrapper.java.maxmemory=1331  
  • taskomatic デーモンを再起動します。
 #  service taskomatic restart

注意: taskomatic を変更した場合は Satellite 自体を再起動することが推奨されます。

# rhn-satellite restart
  • tomcat の最大ヒープサイズを 256Mb から 512Mb に増加します。

  • Satellite サーバー 5.5 以下では、OS のバージョンに従って /etc/tomcat5/tomcat5.conf または /etc/tomcat6/tomcat6.conf を変更してください。Satellite サーバー 5.6 を使用している場合は、/etc/sysconfig/tomcat5 または /etc/sysconfig/tomcat6 を変更してください。-Xmx の値を増やします (例 512Mb)。

JAVA_OPTS="$JAVA_OPTS -ea -Xms256m -Xmx512m -Djava.awt.headless=true -Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParser -XX:MaxNewSize=256 -XX:-UseConcMarkSweepGC"
  • tomcat デーモンを再起動します。

    • Red Hat Enterprise Linux 5 を使用している Satellite サーバーの場合は、以下を実行します。
    #  service tomcat5 restart
    
    • Red Hat Enterprise Linux 6 を使用している Satellite サーバーの場合は、以下を実行します。
    #  service tomcat6 restart
    
  • ヒープダンプを保存するディレクトリーを /usr 以外の場所に指定するには、How do I change the directory where java heapdumps are written? を参照してください。

Root Cause

  • 現在、/etc/rhn/default/rhn_taskomatic_daemon.conf ファイルでは、ヒープサイズの最小値は 256Mb、そして最大値は 512Mb に設定されています。通常、 Java は、ヒープダンプに 500Mb 使用します。Java プロセス (この場合は taskomatic) でヒープメモリーがなくなると、このエラーが発生します。

  • 現在、/etc/tomcat5/tomcat5.conf では、ヒープサイズの最小サイズと最大サイズはともに 256Mb に設定されています。

  • このエラーの詳細については Java application "java.lang.OutOfMemoryError: GC overhead limit exceeded" を参照してください。

  • この問題は Bugzilla #1132398 で対応されました。

Diagnostic Steps

1TISIGINFO     Dump Event "systhrow" (00040000) Detail "java/lang/OutOfMemoryError" received
...
1CICMDLINE     /usr/bin/java -Dibm.dst.compatibility=true -Xms256m -Xmx512m -Djava.library.path=/usr/lib:/usr/lib64:/usr/lib/oracle/10.2.0.4/client64/lib:/usr ...-Dwrapper.jvmid=5 com.redhat.rhn.taskomatic.core.TaskomaticDaemon
...
2CIUSERARG               -Xms256m
2CIUSERARG               -Xmx512m

上記より、'com.redhat.rhn.taskomatic.core.TaskomaticDaemon' の JVM で OutOfMemory エラーが発生しており、起動時の JVM ヒープメモリの上限は 256MB、最大許容サイズは 512MB に設定されていることが分かります。-Xmx の設定値を増加すると、この問題が解決する場合があります。
...

  • tomcat の java コアファイルでは、以下が確認できます。
1CICMDLINE     /usr/lib/jvm/java/bin/java -Dcatalina.ext.dirs=/usr/share/tomcat5/shared/lib:/usr/share/tomcat5/common/lib -Djavax.sql.DataSource.Factory=org.apache.commons.dbcp.BasicDataSourceFactory -ea -Xms256m -Xmx256m -Djava.awt.headless=true -Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParser -XX:MaxNewSize=256 -XX:-UseConcMarkSweepGC -Dcatalina.ext.dirs=/usr/share/tomcat5/shared/lib:/usr/share/tomcat5/common/lib -Djavax.sql.DataSource.Factory=org.apache.commons.dbcp.BasicDataSourceFactory -Djava.endorsed.dirs=/usr/share/tomcat5/common/endorsed -classpath /usr/lib/jvm/java/lib/tools.jar:/usr/share/tomcat5/bin/bootstrap.jar:/usr/share/tomcat5/bin/commons-logging-api.jar:/usr/share/java/mx4j/mx4j-impl.jar:/usr/share/java/mx4j/mx4j-jmx.jar -Dcatalina.base=/usr/share/tomcat5 -Dcatalina.home=/usr/share/tomcat5 -Djava.io.tmpdir=/usr/share/tomcat5/temp org.apache.catalina.startup.Bootstrap start

2CIUSERARG               -Xms256m
2CIUSERARG               -Xmx256m

上記で、JVMの最小ヒープおよび最大ヒープの上限が 256Mb に設定されていることが分かります。この問題を解決するには、最大ヒープの上限 -Xmx を 512Mb に増加してください。

  • /var/log/message ファイルのメッセージは、以下のように出力されます。
/var/log/messages.1:Jan  9 01:52:15  java[27378]:JVMDUMP032I JVM requested Java dump using '/tmp/javacore.20130109.015204.27378.0002.txt' in response to an event 
/var/log/messages.1:Jan  9 01:52:15  java[27378]:JVMDUMP032I JVM requested Snap dump using '/usr/share/tomcat5/Snap.20130109.015204.27378.0003.trc' in response to an event 
/var/log/messages.1:Jan  9 1:52:16  java[27378]:JVMDUMP032I JVM requested Heap dump using '/tmp/heapdump.20130109.015216.27378.0004.phd' in response to an event  
  • /var/log/tomcat5/catalina.out ファイルの java.lang.OutOfMemoryError 例外は、以下のように出力されます。
JVMDUMP032I JVM requested Java dump using '/tmp/javacore.20130109.121341.10405.0011.txt' in response to an event
JVMDUMP010I Java dump written to /tmp/javacore.20130109.121341.10405.0011.txt
JVMDUMP032I JVM requested Snap dump using '/usr/share/tomcat5/Snap.20130109.121341.10405.0012.trc' in response to an event
JVMDUMP030W Cannot write dump to file /usr/share/tomcat5/Snap.20130109.121341.10405.0012.trc:Permission denied
JVMDUMP010I Snap dump written to /tmp/Snap.20130109.121341.10405.0012.trc
JVMDUMP013I Processed dump event "systhrow", detail "java/lang/OutOfMemoryError".
Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1572)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(Exception in thread "Thread-7" ContainerBase.java:1559)
    at java.lang.Thread.run(Thread.java:736)
java.lang.OutOfMemoryError
    at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:777)
    at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:771)
    at java.lang.Thread.uncaughtException(Thread.java:1213)
2013-01-09 12:13:44,158 [RHN Message Dispatcher] ERROR com.redhat.rhn.common.messaging.ActionExecutor - java.lang.OutOfMemoryError
  • /var/log/tomcat5/catalina.out ファイルの java.lang.OutOfMemoryError 例外は、以下のように出力されます。
INFO   | jvm 28   | 2013/10/03 14:05:15 | JVMDUMP006I Processing dump event "systhrow", detail "java/lang/OutOfMemoryError" - please wait.
INFO   | jvm 28   | 2013/10/03 14:05:15 | JVMDUMP006I Processing dump event "systhrow", detail "java/lang/OutOfMemoryError" - please wait.
INFO   | jvm 28   | 2013/10/03 14:05:15 | JVMDUMP032I JVM requested Heap dump using '/usr/sbin/heapdump.20131003.140515.9571.0010.phd' in response to an event
INFO   | jvm 28   | 2013/10/03 14:05:20 | JVMDUMP010I Heap dump written to /usr/sbin/heapdump.20131003.140515.9571.0010.phd
INFO   | jvm 28   | 2013/10/03 14:05:20 | JVMDUMP032I JVM requested Snap dump using '/usr/sbin/Snap.20131003.140515.9571.0012.trc' in response to an event
INFO   | jvm 28   | 2013/10/03 14:05:20 | JVMDUMP010I Snap dump written to /usr/sbin/Snap.20131003.140515.9571.0012.trc
INFO   | jvm 28   | 2013/10/03 14:05:20 | JVMDUMP013I Processed dump event "systhrow", detail "java/lang/OutOfMemoryError".
INFO   | jvm 28   | 2013/10/03 14:05:20 | JVMDUMP032I JVM requested Java dump using '/usr/sbin/javacore.20131003.140515.9571.0011.txt' in response to an event
INFO   | jvm 28   | 2013/10/03 14:05:20 | JVMDUMP010I Java dump written to /usr/sbin/javacore.20131003.140515.9571.0011.txt
INFO   | jvm 28   | 2013/10/03 14:05:20 | JVMDUMP013I Processed dump event "systhrow", detail "java/lang/OutOfMemoryError".
INFO   | jvm 28   | 2013/10/03 14:05:20 | Exception in thread "Thread-49" java.lang.OutOfMemoryError
  • Taskomatic に java.lang.OutOfMemoryError: GC overhead limit exceeded が記録されます。
  • 新しいチャンネルをダウンロードすると、taskomatic ログに以下のエラーが報告されます。
INFO   | jvm 1    | 2013/11/22 11:00:17 | 2013-11-22 11:00:17,134 [Thread-53] INFO  com.redhat.rhn.taskomatic.task.repomd.RepositoryWriter - Generating new repository metadata for channel 'rhel-x86_64-server-5'(sha1) 15661 packages, 2856 errata
INFO   | jvm 1    | 2013/11/22 11:00:50 | Exception in thread "Thread-53" java.lang.OutOfMemoryError:GC overhead limit exceeded

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.