web-dev-qa-db-ja.com

コンピューターが8 GBのRAMを4つ以上使用していない...? (64ビットコンピュータ)

最近、コンピューターの将来性を保証するために、元の4 GBのメモリーに加えて追加しました。合計メモリを8 GBにしたところ、速度に目立った変化はありませんでした。タスクマネージャーを調べたところ、ChromeとFirefoxがそれぞれ20個のタブで開いていても、使用中のメモリが4GBを超えないことがわかりました。

調査した後、誰もが提案したことは、使用可能なメモリの量を確認することだけでした。奇妙なことに、8GBのメモリがあり、7.74GBが使用可能であると書かれています。

私のHP Pavilion g7-1075dxの仕様はこちらにあります。 これは、AMD Phenom IIを搭載したWindows 7 Home Premium 64ビットを搭載したノートブックPCです。

私の主な質問は次のとおりです。64ビットコンピューターで、7を超えるメモリを使用できる場合でも、コンピューターが4 GBを超えるメモリを使用しないのはなぜですか。

編集:それが役立つ場合、リソースモニターは他のすべてのRAMを「スタンバイ」として説明します

17
mattycfp

それが役立つ場合、リソースモニターは他のすべてのRAMを「スタンバイ」として説明します

「スタンバイ」RAM is が使用されています。これはページキャッシュとして使用され(すべてのプロセスワーキングセットから最近失われたページを保持します。つまり、これらのページフォールトはディスクに移動せずに解決できます)、SuperFetchによるプロアクティブファイルキャッシュにも使用されます。

スタンバイページは、他の用途に割り当てる前にディスクに書き込む必要がないため、「使用可能」と見なされます。 does がディスクからの読み取りを必要とするページフォールトにプロセスがヒットした場合など、新しい物理ページをそのプロセスに割り当てる必要があり、必要に応じてこれらをスタンバイから取得できます。リスト。 (これは、この目的でページを見つけるための最初の選択肢ではありません。これが無料であり、次にゼロページリストになります。)

つまり、システムは正常に動作しています。

Windowsの実験で使用されているツールの1つであるコマンドラインツールtestlimitを使用すると、システムに強制的にRAMを「使用中」の状態にすることができます。内部。これは通常のsysinternalsツールの一部ではありませんが、それらに関連付けられています。 sysinternalsサイトで here を見つけてください。ダウンロードは、testlimit.exeとtestlimit64.exeの2つのバージョンを含むZipファイルです。どちらもラージアドレス対応にリンクされているため、32ビットバージョンでは、/ 3GBで起動した32ビットマシンで最大3 GiB、64で最大4 GiBを割り当てることができます。ビットマシン。

c:\> testlimit -?がお手伝いします。

c:\> testlimit -d 4 -c 512は、2つのGiBプロセスプライベート仮想アドレス空間を、それぞれ4 MiBの512割り当てで割り当てようとします。これは64ビットマシンで正常に動作するはずです。 32ビットマシンでは、 not で/ 3GB(ほとんどはそうではありません)でブートしますが、少し前にエラーが発生する可能性があります。それ自体、すべてのDLLなど)のため、プログラムで割り当てることができる完全な2 GiBはありません。

どちらの場合も、「利用可能な」RAMは減少し、「使用中」のRAMは増加しますが、 2 GiB価値とは限りません。 OSがプロセスのプライベートワーキングセットに2 GiBをすべて残すこと。たとえ短期的にそれを行ったとしても、OSが「実際には何もしていないので、他のプロセスはもっと必要とする」とOSが判断してページアウトするため、後でプロセスワーキングセットが減少する場合があります。

割り当て「チャンク」のサイズを大きくしすぎて、それに応じてチャンクの数を減らします。各割り当ては実質的に隣接している必要があるため、すぐに失敗する可能性があります。例えば4 GiBアドレス空間で7つの512 MiBチャンクを見つけようとすると、失敗する可能性があります。

l(eak)の代わりにd(irty)オプションを使用すると、プログラムは仮想空間を割り当てますが、それを参照することはありません。これはしない結果として、「使用可能な」RAMがかなり減少します。

(d(irty)オプションは、x86/x64ページテーブルエントリの「ダーティページビット」から名前を取得します。これは、対応する仮想ページが「変更」スタイルのオペランドでアクセスされたときに設定されます。ページのコンテンツが変更されました。これは、プロセスのワーキングセットからページを削除する必要がある場合、ページを他の何かに使用する前に、そのコンテンツをどこかに保存する必要があることを示すWindowsの指示です。「ダーティ」のあるページビットセットは、エビクションの直後に「変更されたページリスト」に移動します。そこから、Windowsはそれらをそれぞれのバッキングストアに書き込みます。)

これらのテストが上記のように機能するためには、十分な「コミット」が利用可能である必要があります(l(eak)オプションの場合でも、このオプションはかなりの量のRAMを使用しません)。具体的には、テストを開始する前に、「コミット制限」が「コミット料金」より少なくとも2 GiB(またはどの程度割り当てているか)高くなっている必要があります。これは、d(irty)だけでなく、l(eak)オプションを使用している場合にも当てはまります。この制限に達すると、「システムのメモリが不足しています」ポップアップなどが表示されます。もちろん、解決策はRAMを追加したり、ページファイル設定を増やしたりすることです。

28
Jamie Hanrahan

Windowsは実際にRAM=の使用を制限するように構成できます。ラップトップでこの設定をどのようにまたは誰が構成したのかはわかりませんが、次のことを確認する必要があります。

Max Ram Setting

この article には詳細がありますが、上記のダイアログボックスへのアクセスは簡単です。

  1. スタートアイコンをクリックし、検索ボックスにmsconfig.exeと入力します

    how to launch msconfig

  2. Msconfig.exeを起動し、[Boot]タブをクリックしてから[Advanced Options...]ボタンをクリックすると、次のようになります。

    msconfig boot settings dialog

  3. 実用的な値を入力してください。 8GB RAMの場合は8192、またはMaximum memoryチェックボックスを完全にオフにすると、WindowsですべてのRAMが使用されるようになります。私は間違いなく両方のオプションを試します。

    maximum ram setting

15
misha256

SysInternals RAMMap を使用すると、PCが物理RAMをどのように処理するかを正確に確認できます。タスクマネージャーやプロセスエクスプローラーなどの他のツールは、主にvirtualメモリに焦点を当てており、この状況に最適なツールではありません。

[使用数]タブで、多くのアプリケーションを開いていないときに、大部分が未使用であることがわかります。

SysInternals RAMMap

これは、PCがこの状態のままになることを意味するものではありません。いくつかのプログラムを開くだけで、メモリが使用されます。

10
Thomas Weller

Windowsは、ページングメモリなどの賢い機能をいくつか備えています。それはあなたがしているほとんどのタスクを不必要であると見なし、ページファイルに大量のものをダンプすることを決定し、RAMをすべて使い尽くすことを避けるためにそれをしているように見せかけることができます。この理論は、ページングを無効にすることでテストできますが、これは永続的に構成する必要があることではありません。これを行うためのインターネット上の多くのチュートリアルがあります。それが(私の24GBおよび64GBマシンでも)行うことの1つは、ページングルールが約50%、80%、および90%の消費に達したときにページングルールをより厳密にすることです(これらの数値は概算です)。これらの各段階で、大量のものがページファイルにダンプされることに気づきました。

楽しいことは次のようなものです。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define PAGE_SZ (1<<12)

int main() {
    int i;
    int gb = 2; // memory to consume in GB

    for (i = 0; i < ((unsigned long)gb<<30)/PAGE_SZ ; ++i) {
        void *m = malloc(PAGE_SZ);
        if (!m)
            break;
        memset(m, 0, 1);
    }
    printf("allocated %lu MB\n", ((unsigned long)i*PAGE_SZ)>>20);
    getchar();
    return 0;
}

それはいくつかのCコードです。 GCCまたはコンパイラを入手し、自分をexeにして、メモリ消費量が増えるのを観察します。 2GBを超えるメモリを消費する場合は、コンパイルして64ビットプロセスとして実行する必要があります。あなたがそのようなことに夢中になっているなら、他に何もなければ、それは興味深い実験になるかもしれません:)

編集:プログラムがこれで死ぬことはないことに注意したかっただけです。他のコードが機能するかどうかがわからないので、以前のコードから編集しました(メモリがページングされ、メモリが消費されなくなります(笑))。新しいコードにはint gb = 2; // memory to consume in GBという行が含まれています。2を変更すると、プログラムが消費するメモリの量が調整されるため、必要なだけ使い切るように設定できます。システムの設定を超える値に設定すると、おそらくクラッシュします(テストされていないため、注意して使用してください)

5
XtrmJosh

件名の 非常に良い記事 からの引用:

メモリを増やしても、実際には[コンピュータ]の処理速度は向上しません。それを実行できるのは、より高速なCPUだけです。

そして、私の経験では、それは一般的に絶対的に真実です。多くのプログラムを同時に実行していない限りおよびこれらのプログラムには重要なRAM要件があるため、ほとんど表示されません。 4GBを超えるRAMを搭載することによる現実的なメリット。

4GBが大量のRAMの地獄であることを人々は理解していないようです。それ以上にWindowsを使用するには努力が必要です。 異なるアプリをたくさん開いて、それらのアプリでいくつかの大きなファイルを開く必要があります。 YouTubeビデオのいくつかのタブを表示すると、4 GBを超える使用率が表示される場合があります。

5
misha256

32ビットプログラムを使用して、コンピューターの実行速度をテストしていますか?その場合、RAMがさらに存在する場合でも、32ビットアドレスは4 GBのRAMしか指定できないことに注意してください。64ビットプログラムを使用してテストを繰り返す必要があります。 RAM presentの4 GBで速度を確認し、有用な結果が必要な場合はRAM presentの8 GBで再度確認します。また、 4 GBを超えるメモリを使用して高速に実行できる64ビットプログラムである-すべてが実行できるわけではありません。プログラムが32ビットかどうかを確認するには、プログラムを起動して実行したままにしてから、Windowsタスクマネージャを起動し、 [プロセス]をクリックし、目的のプログラムが見つかるまで下にスクロールします。[イメージ名]列のプログラムの名前の後にスペースが続いている場合、* 32であれば、32ビットプログラムです。

1
milesrf

Get process Explorer(procexp)from Sysinternals を取得します。リソースグラフがあり、プロセスごとのメモリ使用量を表示できます。これは、ストックプロセスビューよりもはるかに優れています。

物理RAMの使用と仮想SPQCEの使用を比較して、それを使いきっていないかどうかを確認できますまたはさらに必要なようですが、物理的な使用を制限します。

ほとんどのありふれたプログラムは、需要を低く保つために異なるワーキングセットのサイズを使用します。プログラムが大量のメモリを割り当てる場合、それは実際にはusing同時にすべてではありません...

Windowsは、プログラムからページを積極的に利用可能なリストに移動しますbutページ違反が発生した場合は、リストからプルされます。スワップファイルからロードします。 standbyにはこれらが含まれている可能性があります。さまざまなツールがさまざまな方法でさまざまなセットにラベルを付けます。

少なくともこのテストでは、スワップファイルをオフにしてみてください。これにより、データメモリが実際に使用されます。 procexpはそれを明確に見るのに十分かもしれませんが。

0
JDługosz