0

私の Azure ロール スタートアップ コードでは、DCOM オブジェクトをインスタンス化してインスタンス化できることを確認し、その時点では必要ないのですぐに解放します。

newこれは、対応する C# RCW クラスに実際に対応する別のスレッドThread.Join()と、そのスレッドに 30 秒のタイムアウトが設定されたメイン スレッドで行います。スレッドがThread.Join()返された後も実行されている場合、これは DCOM オブジェクトの作成に疑わしいほど長い時間がかかるため、Thread.Abort()呼び出されてロールが再起動されることを意味します。30 秒で十分です。オブジェクトは軽量で、インスタンス化に時間がかかることはありません。

このコードは、サービスを劇的にスケールアップしようとするまでは問題なく機能していました。コンピューティング コアのクォータを引き上げるようにサポートに依頼し、100 (100) インスタンスにスケーリングしようとしました。

ほとんどのインスタンスは正常に開始されましたが、一部のインスタンスはまさに上記の状況に直面しました。DCOM オブジェクトの作成に時間がかかりすぎたため、コードが例外をスローし、ロールが再開されました。

何度かテストを繰り返しました。数十のインスタンスでスケールアップするように依頼すると、新しく開始されたインスタンスの一部で問題が再現されます。すべてのインスタンスが均一であるため、何がこの動作を引き起こしているのかわかりません。

一部のインスタンスでのみ DCOM オブジェクトが非常に長くかかる理由は何ですか?

4

1 に答える 1

0

これまでの私の調査によると、多数のインスタンスでスケールアップすると、一部のインスタンスは、特に IO バウンド操作に関して、開始の瞬間近くでかなり遅くなることが示されています。これは、VM が実行されているホスト (8 コアのハードウェア サーバー) が負荷の高い処理を行っているため、IO をめぐって深刻な競合が発生しているためだと思います。これらの条件下では、通常は約 1 秒かかる DCOM オブジェクトのインスタンス化に最大 40 秒かかる場合があり、タイムアウトを増やす必要があります。

于 2012-06-26T09:34:05.690 に答える