免責事項: これは英文の記事「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 running2024-11-20 23:06:55 | ALERT | vmware-vcd-cell is dead but /var/run/vmware-vcd-cell.pid exists, attempting to restart it2024-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 4042024-11-20 23:08:06 | WARN | Server status returned HTTP/1.1 5032024-11-20 23:09:06 | WARN | Server status returned HTTP/1.1 5032024-11-20 23:11:06 | INFO | vmware-vcd-cell running
VMware Cloud Director 10.5
VMware Cloud Director 10.6
注: AMQP ベースの機能は VCD 10.6 でも引き続き動作しますが、VCD 10.6 以降では非推奨となり、サポートされなくなりました。詳しくはドキュメントをご覧ください。
VCD(RabbitMQ クライアント)と RabbitMQ サーバ間の接続が強制的に切断された場合、AMQP スレッドが VCD に残留します。
ロードバランサなどにより定期的に強制切断が発生する環境では、VCD で「java.lang.OutOfMemoryError」が発生し、vmware-vcd-cell サービスが繰り返し再起動される現象が発生します。
発生頻度は環境によって異なりますが、対象環境では数日ごとにいずれかのセルで交互に発生することを確認しています。
現在、修正方法はありません。
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 からの切断を減らすことができる場合があります。
# /opt/vmware/vcloud-director/bin/cell-management-tool manage-config -n amqp.heartbeat -l
# /opt/vmware/vcloud-director/bin/cell-management-tool manage-config -n amqp.heartbeat -v 30または、ロード バランサを削除し、VCD と RabbitMQ サーバーを直接接続します。