Как я ограничиваю RAM для тестирования низких ситуаций с памятью?

Я пытаюсь воспроизвести ошибку, которая, кажется, появляется, когда пользователь израсходовал набор RAM. Что лучший способ состоит в том, чтобы или ограничить доступную RAM, которую компьютер может использовать или заполнить большую часть из него? Я предпочел бы делать это, физически не удаляя память и не выполняя набор произвольных, интенсивно использующих память программ (т.е., Photoshop, Quake, и т.д.).

6
задан Newtang 18 February 2010 в 01:22
поделиться

5 ответов

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

VMWare - один из лидеров в этой области, и у них есть бесплатный проигрыватель VMware , который позволяет вам это делать.

10
ответ дан 8 December 2019 в 04:29
поделиться

Я копирую свой ответ из аналогичного вопроса:

Если вы тестируете собственное / неуправляемое / C ++ приложение, вы можно использовать AppVerifier и его настройку моделирования низкого ресурса, которая будет использовать внедрение ошибок для моделирования ошибок в распределении памяти (среди прочего). Это также действительно полезно для поиска множества других тонких проблем, которые часто приводят к сбоям приложения.

Вы также можете использовать consumer.exe, который является частью Microsoft Windows SDK для Windows 7 и .NET Framework 3.5 с пакетом обновления 1 , чтобы легко использовать много памяти, дискового пространства, времени процессора и т. Д. файл подкачки или пул ядра и посмотрите, как ваше приложение справляется с нехваткой доступных ресурсов. (Сбой? Как это сказывается на производительности? И т. Д.)

11
ответ дан 8 December 2019 в 04:29
поделиться

Используйте объект задания или ulimit (1) .

3
ответ дан 8 December 2019 в 04:29
поделиться

Создайте виртуальную машину и настройте оперативную память на то, что вам нужно.

Я использую Virtual Box от SUN.

http://www.virtualbox.org/

Настроить легко.

1
ответ дан 8 December 2019 в 04:29
поделиться

«Мой первый вопрос: являются ли параллельные версии алгоритмов сортировки полезными в реальном мире» - зависит от размера набора данных, над которым вы работаете в реальной работе. Для небольших наборов данных ответ - нет. Для больших наборов данных это зависит не только от размера набора данных, но и от конкретной архитектуры системы.

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

То же самое относится к чипсам, которые имеют несколько кэшей L2 и архитектуры NUMA (неоднородный доступ к памяти). Таким образом, чем больше ядер нужно распределить сортировку, тем больше необходимо будет соответственно увеличить константу ToParallelize.

Другим ограничивающим фактором, который вы определили, является общий доступ к памяти или соперничество по шине памяти. Поскольку шина памяти может удовлетворять только определенному количеству обращений к памяти в секунду; наличие дополнительных ядер, которые по существу ничего не делают, кроме чтения и записи в основную память, создаст большую нагрузку на систему памяти.

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

-121--3505019-

Это работает для меня:

set MAKE_COMMAND=mingw32-make -j% NUMBER _ OF _ PROCESSORS%

-121--4566245-

При разработке на Java можно установить предельные значения памяти для JVM при запуске.

0
ответ дан 8 December 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: