17

Недавно, чтобы защитить свой компьютер от будущего, я добавил к своему оригинальному 4 ГБ памяти. Я увеличил общую память до 8 ГБ, и у меня нет заметных изменений в скорости - даже когда это должно быть. Я заглянул в Диспетчер задач и увидел, что мой компьютер НЕ будет использовать более 4 ГБ памяти, даже если Chrome и Firefox открыты с 20 вкладками в каждой.

После исследования все, что всем предлагалось сделать, это проверить, сколько памяти можно было использовать. Как ни странно, там написано, что у меня 8 ГБ памяти, а 7,74 ГБ можно использовать.

Технические характеристики моего HP Pavilion g7-1075dx можно найти здесь. Это ноутбук с Windows 7 Home Premium 64-битный с AMD Phenom II.

Мой главный вопрос: на моем 64-битном компьютере почему мой компьютер не использует более 4 ГБ памяти, даже если используется более 7?

РЕДАКТИРОВАТЬ: если это помогает, Resource Monitor описывает все остальное ОЗУ как "Резервный"

7 ответов7

27

если это помогает, Resource Monitor описывает все остальное ОЗУ как "Резервный"

"Standby" RAM используется. Он используется в качестве кэша страниц (в нем хранятся страницы, недавно потерянные из всех рабочих наборов процессов; т. Е. Сбои страниц, которые можно устранить без перехода на диск), а также для упреждающего кэширования файлов с помощью SuperFetch.

Он считается "доступным", поскольку резервные страницы не нужно записывать на диск, чтобы их можно было использовать для другого использования. Например, когда процесс сталкивается с ошибкой страницы, которая требует чтения с диска, этому физическому процессу должны быть выделены новые физические страницы, и при необходимости их можно взять из списка ожидания. (Это не первый выбор для поиска страниц для этой цели, это будет бесплатный, а затем список нулевой страницы.)

Другими словами, ваша система работает так, как должна быть.

Вы можете заставить свою систему легко перевести ОЗУ в состояние "используется" с помощью инструмента командной строки testlimit , одного из инструментов, используемых в экспериментах в Windows Internals. Он не является частью обычных инструментов sysinternals, но связан с ними; найти его здесь на сайте sysinternals. Загружаемый файл представляет собой ZIP-файл, содержащий две версии: testlimit.exe и testlimit64.exe. Оба они связаны с поддержкой больших адресов, поэтому 32-разрядная версия сможет выделять до 3 ГБ на 32-разрядной машине, загруженной с /3 ГБ, до 4 ГБ на 64-разрядной машине.

c:\> testlimit -? дает помощь.

c:\> testlimit -d 4 -c 512 попытается выделить 2 ГиБ частного виртуального адресного пространства процесса в 512 распределениях по 4 МБ каждый. Это должно нормально работать на 64-битной машине. На 32-битной машине, не загруженной с /3GB (большинство нет), это может привести к ошибке немного раньше, потому что в процессе уже есть несколько MiB вещей (например, сама программа, все библиотеки DLL и т.д.), Поэтому для программы выделяется не совсем 2 ГиБ.

В обоих случаях будет иметь место уменьшение "доступной" ОЗУ и увеличение ОЗУ "при использовании", но не обязательно на 2 ГБ, поскольку нет гарантии, что ОС оставит все 2 ГБ в частном рабочем наборе процесса. Даже если это произойдет в краткосрочной перспективе, вы можете заметить, что рабочий набор процесса уменьшится позже, когда ОС решит: «Хм, вы на самом деле ничего с этим не делаете, другим процессам это нужно больше» и выводит его на экран.

Слишком сильно увеличьте размер "чанков" выделения, соответственно сократив количество чанков, и скорее всего он потерпит неудачу раньше, поскольку каждое выделение должно быть практически непрерывным. Например, попробуйте найти семь блоков по 512 МБ в адресном пространстве 4 ГиБ, и вы, скорее всего, потерпите неудачу.

Если вы используете опцию l(eak) вместо d(irty), программа выделит виртуальное пространство, но никогда не будет ссылаться на него. Это не приведет к заметному уменьшению "доступной" оперативной памяти.

(Параметр d(irty) берет свое имя от "бита грязной страницы" в записи таблицы страниц x86/x64, который устанавливается при обращении к соответствующей виртуальной странице с операндом в стиле "модификация"), то есть содержимое страницы имеет был изменен Это указывает Windows на то, что, если страница должна быть удалена из рабочего набора процесса, ее содержимое должно быть сохранено где-то перед тем, как страница может быть использована для чего-то другого. Страницы с установленным "грязным" битом сразу после выселения переходят в "измененный список страниц"; оттуда Windows записывает их в соответствующие хранилища.)

Вам нужно будет иметь достаточно "коммитов", чтобы эти тесты работали, как описано выше (даже для опции l (eak), даже если эта опция не использует сколько-нибудь заметного объема ОЗУ). В частности, ваш "предел фиксации" должен быть как минимум на 2 ГиБ (или сколько вы выделяете) выше, чем "заряд фиксации" перед началом теста. Обратите внимание, что это применимо, даже если вы используете опцию l (eak), а не просто d (irty). Если вы достигнете этого предела, вы увидите всплывающие окна "системе не хватает памяти" или аналогичные. Конечно, лекарство состоит в том, чтобы добавить больше оперативной памяти и / или увеличить параметры файла подкачки.

17

На самом деле Windows можно настроить на ограничение использования оперативной памяти. Я не знаю, как или кто настроил бы этот параметр на вашем ноутбуке, но вы должны проверить:

Max Ram Setting

В этой статье есть больше деталей, но добраться до вышеупомянутого диалогового окна легко:

  1. Нажмите значок «Пуск» и введите msconfig.exe в поле поиска.

    как запустить msconfig

  2. Запустите msconfig.exe, щелкните вкладку Boot , затем нажмите кнопку Advanced Options... , и вы в:

    msconfig диалог настроек загрузки

  3. Либо введите разумное значение, например, 8192 для 8 ГБ ОЗУ, либо полностью снимите флажок Maximum memory что должно заставить Windows использовать всю имеющуюся оперативную память. Я бы определенно попробовал ОБА варианты.

    максимальная установка плунжера

10

Вы можете использовать SysInternals RAMMap, чтобы увидеть, что именно ПК делает с вашей физической оперативной памятью. Другие инструменты, такие как Диспетчер задач или Обозреватель процессов, в основном ориентированы на виртуальную память и не являются лучшими инструментами для этой ситуации.

На вкладке "Использовать счетчик" вы можете увидеть, что большие порции не используются, пока вы не открыли много приложений.

SysInternals RAMMap

Это не означает, что ваш компьютер когда-либо останется в этом состоянии. Просто откройте несколько программ и память привыкнет.

5

Windows делает некоторые умные вещи, такие как пейджинговая память. Может случиться так, что он считает большинство задач, которые вы выполняете, ненужными и решает выгрузить кучу материала в файл подкачки, создавая впечатление, будто делает это просто для того, чтобы не использовать всю вашу оперативную память. Вы можете проверить эту теорию, отключив пейджинг, хотя это не то, что вы должны постоянно настраивать. В Интернете есть много учебников, чтобы сделать это. Одна из вещей, которую он делает (даже на моих машинах на 24 ГБ и 64 ГБ), - это сделать правила подкачки намного более строгими, когда они достигают приблизительно 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 и наблюдайте, как увеличивается потребление памяти. Если вы хотите использовать более 2 ГБ памяти, вам нужно скомпилировать и запустить как 64-битный процесс. Если вам нравятся такие вещи, это может быть интересный эксперимент, если не больше :)

Изменить: Просто хотел отметить, что программа не умрет с этим. Я отредактировал его из некоторого предыдущего кода, так как я не уверен, что другой код сработал бы (память была бы разбита на страницы, в результате чего память не использовалась, смеется). Новый код содержит строку int gb = 2; // memory to consume in GB - при изменении значения 2 будет изменяться объем памяти, который должна использовать программа, таким образом, вы можете настроить ее на использование столько, сколько вы хотите. Установка этого значения выше того, что есть в вашей системе, может привести к сбою (не проверено, поэтому используйте его с осторожностью)

5

Цитата из очень хорошей статьи на эту тему:

Больше памяти на самом деле не увеличивает скорость обработки [компьютера]. Только более быстрый процессор может сделать это.

И по моему опыту, это абсолютно верно, в общем. Если вы не запускаете много программ одновременно и эти программы имеют значительные требования к ОЗУ, вы вряд ли увидите какую-либо реальную выгоду от наличия более 4 ГБ ОЗУ.

Люди, похоже, не понимают, что 4 ГБ - это чертовски много оперативной памяти. Заставить Windows использовать больше, чем это требует усилий. Вам нужно будет открыть много разных приложений и в этих приложениях открыть несколько больших файлов. Добавьте несколько вкладок видео на YouTube, и вы можете начать видеть> 4 ГБ использования.

1

Используете ли вы 32-разрядную программу для проверки скорости работы компьютера? Если это так, обратите внимание, что 32-разрядные адреса могут указывать только на 4 ГБ ОЗУ, даже если у вас есть больше ОЗУ. Вам нужно будет повторить тест с использованием 64-битной программы и проверить ее скорость при наличии 4 ГБ ОЗУ и еще раз при наличии 8 ГБ ОЗУ, если вы хотите получить полезные результаты. Кроме того, это должна быть 64-разрядная программа, которая может использовать более 4 ГБ памяти для более быстрой работы - не все из них могут. Чтобы определить, является ли программа 32-разрядной, запустите ее и оставьте ее работающей, затем запустите диспетчер задач Windows, нажмите «Процессы» и прокрутите вниз, пока не найдете нужную программу. Если за именем программы в столбце «Имя изображения» следует пробел, то * 32, тогда это 32-битная программа.

0

Получите проводник процессов (procxp) от Sysinternals. Он имеет график ресурсов и может отображать использование памяти для каждого процесса, намного лучше, чем представление стандартного процесса.

Вы можете взглянуть на физическое использование оперативной памяти по сравнению с использованием виртуального spqce, чтобы убедиться, что вы просто не используете все это или вам кажется, что вам нужно больше, но вы ограничиваете физическое использование.

Большинство обычных программ используют другой размер рабочего набора, который будет поддерживать низкий спрос. Если программа выделяет тонну памяти, она на самом деле не использует все это одновременно ...

Windows будет агрессивно перемещать страницы из вашей программы в список, где они доступны, но если произойдет сбой страницы, она будет удалена из списка без необходимости загружать ее из файла подкачки. Ожидание может быть в том числе эти. Разные инструменты по-разному маркируют разные наборы.

Вы можете попробовать отключить файл подкачки, по крайней мере, для этого теста. Это приведет к реальному использованию памяти данных. Хотя может быть достаточно procxp, чтобы это ясно увидеть.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .