Azureでワーカーロールインスタンスを実行すると、共有ホスト(EC2など)で実行されている完全なVMですか?それとも、共有システム(Herokuなど)で実行されていますか?
たとえば、アプリケーションが100 GBのメモリを要求し始めたらどうなりますか?制限に違反したために自動的に強制終了されますか(Google App Engine)、それともVMを使い果たして、Azureファブリックが再起動しますか?
2つの役割が同じシステムで実行されることはありますか?
Azureでワーカーロールインスタンスを実行すると、共有ホスト(EC2など)で実行されている完全なVMですか?それとも、共有システム(Herokuなど)で実行されていますか?
たとえば、アプリケーションが100 GBのメモリを要求し始めたらどうなりますか?制限に違反したために自動的に強制終了されますか(Google App Engine)、それともVMを使い果たして、Azureファブリックが再起動しますか?
2つの役割が同じシステムで実行されることはありますか?
これはVM全体であり、割り当てられるリソースは、選択したVMのサイズに直接基づいており、1.75GB(小)から14GB(XL)まで、1〜8コアです。768MBのRAMと共有コアを備えたExtraSmallインスタンスもあります。完全なVMサイズの詳細はこちらです。
Windows Azureでは、VMは物理サーバーに割り当てられ、そのようなサーバーを見つけてすべてのWebまたはワーカーロールインスタンスを適切に割り当てるのはファブリックの責任です。複数のインスタンスがある場合、これは、これらのVMを障害ドメイン間で割り当てることを意味します。
VMを使用すると、リソース部門に割り当てすぎても、強制終了されることを心配する必要はありません。それは、マシンを持っているようなものであり、そこにあるものを超えることはできません。
同じシステムで実行されている2つの役割に関して:各役割にはインスタンスがあり、複数のインスタンスがある場合、前述のように、インスタンスはフォールトドメインに分割されます。たとえば、4つのインスタンスと2つのフォールトドメインがある場合、同じラック(または同じサーバー)に2つのインスタンスがある可能性があります。
これを確認するために簡単なテストを実行しました。1,75ギガバイトのメモリのような「小さな」インスタンスを使用しています。私のコードは、を使用ArrayList
して大きな配列への参照を格納し、それらの配列がガベージコレクションされないようにします。各配列は10億byte
秒で、割り当てられると、各要素をゼロに設定するループを実行し、次に別のループを実行して各要素がゼロであることを確認し、オペレーティングシステムからメモリが実際に割り当てられていることを確認します( C#ですが、C ++では確かに重要でした)。配列が作成され、書き込まれ、読み取られると、に追加されArrayList
ます。
したがって、私のコードは5つのそのような配列を正常に割り当て、6番目の配列を割り当てようとするとSystem.OutOfMemoryException
。50億バイトとオーバーヘッドは、マシンに割り当てられた物理メモリの1.75ギガバイトを確実に超えるため、これは、ページファイルがVMで有効になっており、動作が通常のWindows Server 2008と同じであることを証明していると思いますが、制限があります。それが実行されているマシン。