RabbitMQ が構成された VCD 環境で次のエラーが発生します: java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
search cancel

RabbitMQ が構成された VCD 環境で次のエラーが発生します: java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached

book

Article ID: 412284

calendar_today

Updated On:

Products

VMware Cloud Director

Issue/Introduction

免責事項: これは英文の記事「In a VCD environment with RabbitMQ configured, the following error occurs: java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事を参照してください。

VCD でタスクが突然失敗します。

vcloud-container-debug.log を確認すると、タスクが失敗した時刻付近の次のログが表示されます。

2024-11-20 23:06:32,234 | ERROR    | processor-Backend         | DefaultActivityQueueProcessor  | Unxpected error submitting activity com.vmware.ssdc.backend.services.impl.CreateDiskActivity/urn:uuid:########-####-####-####-############ to activity template ActivityTemplate [activityExecutor=com.vmware.vcloud.activity.executors.PersistentActivityExecutor@55b43c68, activityProvider=com.vmware.vcloud.activity.toolkit.SpringActivityProvider@1ec4989e]. Will not retry, clearing queue element. | 
java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
        at java.base/java.lang.Thread.start0(Native Method)
        at java.base/java.lang.Thread.start(Thread.java:798)
        at java.base/java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:937)
        at java.base/java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1343)
        at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118)
        at com.vmware.vcloud.activity.executors.LocalActivityExecutor.submit(LocalActivityExecutor.java:368)
        at com.vmware.vcloud.activity.executors.PersistentActivityExecutor.innerSubmit(PersistentActivityExecutor.java:236)
        at com.vmware.vcloud.activity.executors.PersistentActivityExecutor.submit(PersistentActivityExecutor.java:155)
        at com.vmware.vcloud.activity.toolkit.ActivityTemplate.run(ActivityTemplate.java:245)
        at com.vmware.vcloud.activity.toolkit.ActivityTemplate.run(ActivityTemplate.java:215)
        at com.vmware.vcloud.activity.toolkit.ActivityTemplate.run(ActivityTemplate.java:151)
        at com.vmware.vcloud.activity.toolkit.queueing.DefaultActivityQueueProcessor.submitElement(DefaultActivityQueueProcessor.java:388)
        at com.vmware.vcloud.activity.toolkit.queueing.DefaultActivityQueueProcessor$1.run(DefaultActivityQueueProcessor.java:194)

また、vmware-vcd-watchdog.log を確認すると、vmware-vcd-cell が再起動したことがわかります。

2024-11-20 23:05:54 | INFO  | vmware-vcd-cell running
2024-11-20 23:06:55 | ALERT | vmware-vcd-cell is dead but /var/run/vmware-vcd-cell.pid exists, attempting to restart it
2024-11-20 23:07:05 | INFO  | Started vmware-vcd-cell (pid=3955)
2024-11-20 23:07:06 | WARN  | Server status returned HTTP/1.1 404
2024-11-20 23:08:06 | WARN  | Server status returned HTTP/1.1 503
2024-11-20 23:09:06 | WARN  | Server status returned HTTP/1.1 503
2024-11-20 23:11:06 | INFO  | vmware-vcd-cell running

Environment

VMware Cloud Director 10.5
VMware Cloud Director 10.6

注: AMQP ベースの機能は VCD 10.6 でも引き続き動作しますが、VCD 10.6 以降では非推奨となり、サポートされなくなりました。詳しくはドキュメントをご覧ください。

Cause

VCD(RabbitMQ クライアント)と RabbitMQ サーバ間の接続が強制的に切断された場合、AMQP スレッドが VCD に残留します。
ロードバランサなどにより定期的に強制切断が発生する環境では、VCD で「java.lang.OutOfMemoryError」が発生し、vmware-vcd-cell サービスが繰り返し再起動される現象が発生します。
発生頻度は環境によって異なりますが、対象環境では数日ごとにいずれかのセルで交互に発生することを確認しています。

Resolution

現在、修正方法はありません。
VCD と RabbitMQ サーバー間の接続を妨げている可能性のある問題があれば解決してください。
または、AMQP の代わりに MQTT を設定することもできます。

回避策:

スレッド ダンプから AMQP 関連のスレッドの数をカウントし、1000 を超える場合は、vmware-vcd-cell を手動で再起動します。

# /opt/vmware/vcloud-director/bin/cell-management-tool support -i $(service vmware-vcd pid cell) -t | grep -c "AMQP Connection <RabbitMQ Server IP>:5672"

軽減策:

AMQP ハートビート間隔を短くすることで、LB からの切断を減らすことができる場合があります。

  1. 現在の AMQP ハートビート設定を確認する
    # /opt/vmware/vcloud-director/bin/cell-management-tool manage-config -n amqp.heartbeat -l
  2. AMQP ハートビート値を設定します (以下の例では 30 秒に設定しています)
    # /opt/vmware/vcloud-director/bin/cell-management-tool manage-config -n amqp.heartbeat -v 30

または、ロード バランサを削除し、VCD と RabbitMQ サーバーを直接接続します。