多数の仮想マシンで拡張レプリケーション(Enhanced Replication)を使用している場合、以下の事象が発生することがあります。
hbrsrv サービスが、メモリ不足 (OOM: Out-of-Memory) 条件により断続的にクラッシュする。vSphere Replication 9.0.x
この問題は、多数のレプリケーション プロセスが同時に集中したことによって、リカバリサイトの hbrsrv サービス内でデッドロック条件が引き起こされるために発生します。
デッドロックの原因は、大量の同時レプリケーション管理タスク(RefreshInstances() など)によって内部の統合キューが飽和することにあります。
依存関係にあるタスク(ディスクの統合や子 LRO など)も同じキューに追加されますが、管理タスクがこれら依存タスクの完了を待機しながら利用可能なスレッドをすべて占有してしまうため、依存タスクが処理されなくなります。
この相互に待ち合う状態がデッドロックを招きます。タスクがキューに蓄積され続けると、最終的にメモリ不足 (OOM) 状態に至り、サービスがクラッシュします。
Broadcom エンジニアリングはこの問題を認識しており、将来のリリースでの修正に向けて現在取り組んでいます。
デッドロックのリスクを軽減するための暫定的な回避策として、以下の手順を実行し、configstorecli を使用して hbrsrv 構成内のキューおよび同時実行の制限値を増やします。
この手順は、リカバリ サイトに配置されているすべての ESXi ホストで実行する必要があります。
リカバリ サイトの ESXi ホストに root ユーザーとして SSH でログイン
現在の構成を一時的な JSON ファイルにエクスポート
configstorecli config default get -c hbr -g services -k hbrsrv -p vmacore -o /tmp/config.json
vi /tmp/config.json
thread_pool セクションを探し、max_concurrency を 321 に、task_maxを 256 に変更| "thread_pool": { "io_max": 64, "io_min": 2, "max_concurrency": 193, "task_max": 128, "task_min": 2, "thread_name_prefix": "hbrsrv", "thread_stack_size_kb": 64 } |
After:
"thread_pool": { |
configstorecli config current set -c hbr -g services -k hbrsrv -p vmacore -j /tmp/config.jsonconfigstorecli config current get -c hbr -g services -k hbrsrv -p vmacorehbrsrv サービスを再起動して変更を反映/etc/init.d/hbrsrv restart