web-dev-qa-db-ja.com

Azureの32ビットVMには1 GBしか使用できませんRAM

このページによると: https://docs.Microsoft.com/en-us/Azure/virtual-machines/troubleshooting/support-32-bit-operating-systems-virtual-machines

Microsoft Azureでは、32ビットWindowsオペレーティングシステムをAzureに取り込むことができます。

32ビットイメージをAzureに持ち込もうとしましたが、物理メモリの合計のうち、使用可能なメモリは1 GBしかありません(VMサイズによって異なります)。イメージはWindowsの新規インストールで、構成中のRDP。

Only 1GB usable out of 14

オンプレミスのHyper-Vでは、4 GBのうち、3,87 GBの使用可能なメモリがあります。

私はさまざまなオプションを試しました:

  • Windows 10 x32イメージ
  • Windows 7 x32イメージ
  • B2sサイズのマシン(2コア、4 GB)
  • D2v3(2コア、14 GB)
  • sysprep'ped/non-sysprep'pedイメージ

何の助けもない、私は常に14 GBまたは4 GBのうち1 GBの使用可能なメモリを持っています。インターネット検索では、BIOSと関係がある可能性がありますが、Azure VMのBIOSにアクセスできません。この問題に対する解決策または少なくとも説明はありますか?

追伸この質問への回答として、64ビットWindowsまたはネストされた仮想化の使用を提案しないでください。

更新:動的メモリに関するポインタをありがとう。しかし、私はまだ問題の解決に失敗しました。 (Sysinternalsからの)testlimitを使用して大量のメモリ消費をエミュレートし、dmvsc.sys(動的メモリ)ドライバーを実行していることを確認しましたが、RAMの量は増えませんでした。

enter image description here

3
vkrzv

Hyper-Vと動的メモリの癖へようこそ。

AzureのHyper-V vmはすべて動的メモリを使用しています(予約済みインスタンスを除く)。つまり、Hyper-Vは常に(ローカルカーネルによって報告されるように)要求を監視し、必要な物理RAM=をvmに割り当てます。したがって、「1 Gb使用可能」と表示されます[atこのまさに瞬間]。これは、「実際の」物理RAMマッピングの実際の量です(急成長しているアプリ用のバッファも)。

enter image description here

Windows 10仮想マシンは、(驚くほど)機能するために少しRAM=)を必要とします。スクリーンショットでは、メモリ使用量は現時点ではアイドル状態です(私は想定します)。メモリの「要求」は非常に小さいです、したがって、Hyper-Vマシン構成にVM(通常は約15%))に割り当てられたバッファーは、割り当てられた最大値の約1Gbを使用しています。

バッファは重要です:動的メモリを使用していて、たとえばリソースを大量に消費するアプリケーションが起動されたために需要が急に増加した場合、Hyper-VがVMにさらにRAM=)を割り当てるには時間がかかります。これはvery遅い可能性があります(このホスト上の他のマシンの要求に応じて)バッファーが大きいほど、VMは増加した要求に対してよりよく反応します。そこに「最小」バッファーが表示されます。

ヒント:Windowsのインストール時には動的メモリを使用しないでください。インストールに必要な時間が多少長くなる可能性があります。私はあなたがローカルマシンよりもシンが完了するのにずっと長く待ったに違いない。

一般的に言って、Windows 10 x32は最大4GBの静的を使用しますRAMデフォルトのアプリケーションの場合。PAEはこれを拡張できますが、これを行うのはExchange Serverのみです(Windows 10では動作しません)。およびSQL Server(エンタープライズ)。

4
bjoster

OSが1 GBを超えて使用しておらず、動的メモリがVM用に構成されているためです。より多くを必要とするより多くのプログラムを実行するとすぐに、RAM使用可能なメモリのサイズが大きくなります。ところで、4 GBを超えるVMを取得する必要はありませんRAM 32ビットOS。オペレーティングシステム自体は4 GBを超えるアドレスを指定できません。

これは単なる仮定であることに注意してください。私自身はテストしていません。

メモリを割り当てるサンプルコード:

$dictionary = new-object "System.Collections.Generic.Dictionary[[Guid],[int]]"
while ($true) { 
    $dictionary.Add([guid]::NewGuid() , 0) 
}
2