2024年1月21日日曜日

(PC) powerShellで「仮想メモリ」の状況を見る方法(初期化は手動...)

前回の記事で、メインRAM(メモリ)の状況を見たり、クリーンアップする方法を書かせて頂きましたが、今回の記事では、「仮想メモリ」に踏み込んでみたいと思います。


仮想メモリって何

仮想メモリとは、語弊があるのを承知で一言で言うと「メインRAM(メモリ)に入り切らない分を、ストレージで肩代わりしてもらう技術」です。

メインRAMは、ぶっとびの超高速ではあるのですが容量が少なく、電源を切ると中身が消えるという泣き所があります。

それをカバーするのが仮想メモリなのですが、こっちはこっちで、ストレージの容量がその分消費されるのと、速度が(たとえGen.4x4の超高速SSDであっても)メインRAMとは桁違いに遅く、仮想メモリを使う状況だと、確実にPCのパフォーマンスが格段に落ちてしまう事にあります。

そういう一般論はともかく、モバイルPCは、まだまだ潤沢なストレージを搭載する気のないモデルも多く、酷いのになると64GBで済ませようとするし、Surface Go2シリーズもメインは128GBと余裕はなく、とても高価なSurface Pro 9ですらも256GBです(超高価なプレミアムモデルは1TBだけど買ってられん)。

仮想メモリの様子を見て、必要なら初期化するのもアリかと思われます。


仮想メモリの状況を見る「VMEM」コマンド

また私の独学の勝手コマンドで恐縮ですが、VMEMコマンドで仮想メモリがどんくらいストレージを消費してるのか?をすぐに見る事が出来ます。

powerShellは管理者モードで起動して、もしスクリプトファイルにするなら、文字コードはUTF8やShift JISではなく、UTF8 with BOMにすると、Windows PowerShellと、マルチプラットホームのpowerShellの両方で文字コードが共有できます。



#仮想メモリを表示
function VMEM() {
    WRITE-HOST "---仮想メモリ状況---"
    WRITE-HOST "〇ストレージ使用容量"
    $VMEM_STORAGE = GET-CHILDITEM "C:\" -FORCE | ?{$_.Name -match "pagefile.sys|hiberfil.sys|swapfile.sys"} 
    $VMEM_STORAGE | %{$_.Name + "(MB) " + ($_.Length/[Math]::Pow(1024,2)).ToString(".000")}
    
    WRITE-HOST "〇設定情報"
    $VMEM_INFO=Get-CimInstance -Class Win32_PageFileSetting | ?{$_.Name -eq 'C:\pagefile.sys'}
    $VMEM_INFO | %{"初期(MB)="+($_.InitialSize).ToString() + " 最大(MB)="+($_.MaximumSize).ToString()}
}

↑ROG FLOW Z13で実行してますが、「VMEM」と入力するだけで仮想メモリの状況が分かります。

swapfile.sysが膨らんでいると、メインRAMでは足りない分を肩代わりして膨張したな、という目安になります。


仮想メモリの初期化をする方法は...

仮想メモリですが、「swapfile.sys」が膨らんでしまって手に負えないよ、という時にどうするべきか。

Windows 10まではpowerShellからリセット可能でしたが、同じものはWindows 11では動かなくなっていました。

現状は、いったん手動で以下の方法ですかね。



(1)スタートボタンを右クリックし、[設定]をクリックします。
(2)[システム] → [バージョン情報] を選択します。
(3)関連リンクにある [システムの詳細設定] をクリックします。
(4)パフォーマンスの [設定] をクリックします。
(5)[詳細設定] タブを選択し、仮想メモリの [変更] をクリックします。
(6)[すべてのドライブのページングファイルのサイズを自動的に管理する] のチェックを外します。
(7)仮想メモリを設定したいドライブを選択し、[カスタムサイズ] を選択します。
(8)初期サイズと最大サイズを入力します。一般的には、実装メモリ (RAM)の約3倍に設定することが推奨されています。
(9)[設定] をクリックし、[OK] をクリックします。
(10)コンピューターを再起動します。