Мне нужно, чтобы он выполнял определенную программу linux из терминала. Единственное, что нужно сделать программе linux - это использовать все больше и больше памяти. Есть ли такие программы?
7 ответов
как насчет вилочной бомбы ?
еще что-то, что создает серию все более больших оперативных дисков? Вы можете создать RAM диск с
mkdir /tmp /ramdisk; chmod 777 /tmp /ramdisk
mount -t tmpfs -o size = 256M tmpfs /tmp /ramdisk /
создать 256 Мб оперативной памяти. Вы могли бы, вероятно, написать сценарий, который создаст серию RAM-дисков и будет заполнять их несколько раз, пока не произойдет все, что вам нужно.
Из моего предыдущего ответа на StackOverflow:
#include <stdlib.h>
int main() {
int *p;
while(1) {
int inc=1024*1024*sizeof(char);
p=(int*) calloc(1,inc);
if(!p) break;
}
}
бежать
$ gcc memtest.c
$ ./a.out
после запуска этот код заполняет ОЗУ, пока не будет уничтожен ядром. Использование calloc вместо malloc для предотвращения "ленивых вычислений". Идеи взяты из этой темы:https://stackoverflow.com/questions/4383059/malloc-memory-questions
Этот код быстро заполнил мою оперативную память (4 ГБ), а затем примерно через 2 минуты мой раздел подкачки 20 ГБ, прежде чем он умер. Это работает на 64-битной Linux. Если вы используете 32-битную ОС, она будет иметь ограничение 2 или 4 ГБ, прежде чем он умрет.
Сохраните следующее как mem.c
, затем запустите gcc -o mem mem.c
, затем запустите ./mem
. Он выделяет 100 МБ памяти каждую секунду. Больше ничего не делает. Вы можете изменить количество секунд, в течение которых он спит, или количество МБ, которое он выделяет, изменив приведенные ниже цифры.
#include <malloc.h>
#include <unistd.h>
#include <memory.h>
#define MB 1024 * 1024
int main() {
while (1) {
void *p = malloc( 100*MB );
memset(p,0, 100*MB );
sleep(1);
}
}
РЕДАКТИРОВАТЬ
ОК, проверено и обновлено.
Есть утилита под названием stress
которая делает это, помимо прочего. apt-get install stress
от Debian.
Вы можете использовать mprime, который является IIRC, портом linux Prime95 с славой разгона. mprime (и Prime95) позволит вам провести стресс-тестирование памяти и процессора вашей компьютерной системы. Кроме того, вы можете точно указать, сколько памяти вы хотите использовать mprime (для переполнения в пространство подкачки, если хотите).
Найдите mprime и prime95 здесь. Заранее извиняюсь за состояние навигации сайта.
Большинство ответов рекомендуют что-то компилировать; Мой подход был для встроенного устройства, которое уже работало с базовыми инструментами GNU и для которого я не мог скомпилировать что-то нестандартное. Я ответил на это здесь: https://unix.stackexchange.com/a/254976/30731
Если у вас есть базовые инструменты GNU (
sh
,grep
,yes
иhead
), вы можете сделать это:yes | tr \\n x | head -c $BYTES | grep n # Protip: use `head -c $((1024*1024*2))` to calculate 2MB easily
Это работает, потому что grep загружает всю строку данных в ОЗУ (я узнал об этом довольно неудачным образом, когда копировал образ диска). Линия, порождено
yes
заменяя символ новой строки, будет бесконечно долго, но ограничена доhead
$BYTES
байт, таким образом Grep загрузит $ BYTES в памяти. Сам Grep использует как 100-200KB для меня, возможно, вам придется вычесть это для более точной суммы.Если вы также хотите добавить ограничение по времени, это можно сделать довольно легко в
bash
(не будет работать вsh
):cat <(yes | tr \\n x | head -c $BYTES) <(sleep $SECONDS) | grep n
Элемент
<(command)
кажется малоизвестным, но часто чрезвычайно полезным, более подробную информацию о нем можно найти здесь: http://tldp.org/LDP/abs/html/process-sub.html.Затем для использования
cat
:cat
будет ждать завершения ввода, пока не выйдет, и, оставив один из каналов открытым, он сохранит работу grep.Если у вас есть
pv
и вы хотите медленно увеличивать объем используемой оперативной памяти:yes | tr \\n x | head -c $BYTES | pv -L $BYTESPERSEC | grep n
Например:
yes | tr \\n x | head -c $((1024*1024*1024)) | pv -L $((1024*1024)) | grep n
Будет использовать до гигабайта со скоростью 1 МБ в секунду. В качестве дополнительного бонуса,
pv
покажет вам текущий уровень использования и общее использование на данный момент. Конечно, это также может быть сделано с предыдущими вариантами:yes | tr \\n x | head -c $BYTES | pv | grep n
Просто вставив
| pv |
часть покажет вам текущее состояние (пропускная способность и общее количество, по умолчанию, я думаю - в противном случае см. страницу man (ual)).