Um programa linux que usa memória

1

Eu preciso executar um certo tipo de programa linux do terminal. A única coisa que o programa Linux precisa fazer é usar mais e mais memória. Existem programas como esse?

    
por tony_sid 04.05.2011 / 06:56

7 respostas

8

Da minha resposta anterior no StackOverflow:

#include <stdlib.h>

int main() {
int *p;
while(1) {
    int inc=1024*1024*sizeof(char);
    p=(int*) calloc(1,inc);
    if(!p) break;
    }
}

executar

$ gcc memtest.c
$ ./a.out

após a execução, esse código preenche a RAM até ser morto pelo kernel. Usando calloc em vez de malloc para evitar "avaliação lenta". Idéias retiradas deste segmento: link

Este código rapidamente preencheu minha memória RAM (4Gb) e, em seguida, em cerca de 2 minutos minha partição swap de 20Gb antes de morrer. Isso funciona no Linux de 64 bits. Se você usa um sistema operacional de 32 bits, ele terá um limite de 2 ou 4 GB antes de morrer.

    
por 04.05.2011 / 13:06
9

que tal uma bomba de garfo ?

outra coisa que cria uma série de discos RAM cada vez maiores? Você pode criar um disco RAM com

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

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

para criar um disco RAM de 256 mb. você provavelmente poderia criar um script que criaria uma série de discos RAM e preenchê-los repetidamente até que o que fosse necessário ocorresse

    
por 04.05.2011 / 07:13
4

Salve o seguinte como mem.c , execute gcc -o mem mem.c e, em seguida, execute ./mem . Aloca 100MB de memória por segundo. Não faz mais nada. Você pode alterar o número de segundos que dorme ou quantos MB aloca alterando os números abaixo.

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

EDITAR
OK, testado e atualizado.

    
por 04.05.2011 / 09:02
2

Existe um utilitário chamado stress , que faz isso, entre outras coisas. apt-get install stress do Debian.

    
por 15.05.2011 / 18:35
2

eatmemory é um programa muito simples que usamos para testar condições de pouca memória em servidores de banco de dados Espero que funcione para você

    
por 06.06.2014 / 05:51
1

Você poderia usar o mprime, que é, IIRC, uma porta Linux do Prime95 de overclocking. O mprime (e o Prime95) lhe permitirá enfatizar o teste da memória e da CPU do seu sistema de computador. Além disso, você pode especificar exatamente quanto de memória você quer que o mprime use (para transbordar em espaço de swap, se quiser).

Encontre mprime e prime95 aqui . Peço desculpas antecipadamente pelo estado da navegação do site.

    
por 05.05.2011 / 01:29
1

A maioria das respostas recomenda compilar algo; minha abordagem era para um dispositivo embutido que já executava ferramentas GNU básicas e para as quais eu não conseguia compilar algo personalizado. Eu respondi isso aqui: link

If you have basic GNU tools (sh, grep, yes and head) you can do this:

yes | tr \n x | head -c $BYTES | grep n
 # Protip: use 'head -c $((1024*1024*2))' to calculate 2MB easily

This works because grep loads the entire line of data in RAM (I learned this in a rather unfortunate way when grepping a disk image). The line, generated by yes, replacing newlines, will be infinitely long, but is limited by head to $BYTES bytes, thus grep will load $BYTES in memory. Grep itself uses like 100-200KB for me, you might need to subtract that for a more precise amount.

If you want to also add a time constraint, this can be done quite easily in bash (will not work in sh):

cat <(yes | tr \n x | head -c $BYTES) <(sleep $SECONDS) | grep n

The <(command) thing seems to be little known but is often extremely useful, more info on it here: http://tldp.org/LDP/abs/html/process-sub.html

Then for the use of cat: cat will wait for inputs to complete until exiting, and by keeping one of the pipes open, it will keep grep alive.

If you have pv and want to slowly increase RAM use:

yes | tr \n x | head -c $BYTES | pv -L $BYTESPERSEC | grep n

For example:

yes | tr \n x | head -c $((1024*1024*1024)) | pv -L $((1024*1024)) | grep n

Will use up to a gigabyte at a rate of 1MB per second. As an added bonus, pv will show you the current rate of use and the total use so far. Of course this can also be done with previous variants:

yes | tr \n x | head -c $BYTES | pv | grep n

Just inserting the | pv | part will show you the current status (throughput and total, by default, I think - otherwise see the man(ual) page).

    
por 13.01.2016 / 00:50

Tags