1

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

7 ответов7

9

как насчет вилочной бомбы ?

еще что-то, что создает серию все более больших оперативных дисков? Вы можете создать RAM диск с

mkdir /tmp /ramdisk; chmod 777 /tmp /ramdisk

mount -t tmpfs -o size = 256M tmpfs /tmp /ramdisk /

создать 256 Мб оперативной памяти. Вы могли бы, вероятно, написать сценарий, который создаст серию RAM-дисков и будет заполнять их несколько раз, пока не произойдет все, что вам нужно.

8

Из моего предыдущего ответа на 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 ГБ, прежде чем он умрет.

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);
    }
}

РЕДАКТИРОВАТЬ
ОК, проверено и обновлено.

2

eatmemory - очень простая программа, которую мы используем для тестирования нехватки памяти на серверах БД. Надеюсь, она подойдет вам

2

Есть утилита под названием stress которая делает это, помимо прочего. apt-get install stress от Debian.

1

Вы можете использовать mprime, который является IIRC, портом linux Prime95 с славой разгона. mprime (и Prime95) позволит вам провести стресс-тестирование памяти и процессора вашей компьютерной системы. Кроме того, вы можете точно указать, сколько памяти вы хотите использовать mprime (для переполнения в пространство подкачки, если хотите).

Найдите mprime и prime95 здесь. Заранее извиняюсь за состояние навигации сайта.

1

Большинство ответов рекомендуют что-то компилировать; Мой подход был для встроенного устройства, которое уже работало с базовыми инструментами 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)).

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