Se você tiver ferramentas GNU básicas ( sh
, grep
, yes
e head
), poderá fazer isso:
yes | tr \n x | head -c $BYTES | grep n
# Protip: use 'head -c $((1024*1024*2))' to calculate 2MB easily
Isso funciona porque o grep carrega toda a linha de dados na RAM (eu aprendi isso de uma forma bastante infeliz ao usar uma imagem de disco). A linha, gerada por yes
, substituindo as novas linhas, será infinitamente longa, mas é limitada por head
to $BYTES
bytes, portanto o grep carregará $ BYTES na memória. O próprio grep usa 100-200KB para mim, você pode precisar subtrair isso para um valor mais preciso.
Se você também quiser adicionar uma restrição de tempo, isso pode ser feito facilmente em bash
(não funcionará em sh
):
cat <(yes | tr \n x | head -c $BYTES) <(sleep $NumberOfSeconds) | grep n
A coisa <(command)
parece ser pouco conhecida, mas geralmente é extremamente útil, mais informações aqui: link
Em seguida, para o uso de cat
: cat
esperará que as entradas sejam concluídas até a saída, e mantendo um dos tubos aberto, ele manterá o grep ativo.
Se você tiver pv
e quiser aumentar lentamente o uso de RAM:
yes | tr \n x | head -c $BYTES | pv -L $BYTESPERSEC | grep n
Por exemplo:
yes | tr \n x | head -c $((1024*1024*1024)) | pv -L $((1024*1024)) | grep n
Usará até um gigabyte a uma taxa de 1 MB por segundo. Como um bônus adicional, pv
mostrará a taxa atual de uso e o uso total até o momento. Claro que isso também pode ser feito com variantes anteriores:
yes | tr \n x | head -c $BYTES | pv | grep n
Apenas inserindo a parte | pv |
mostrará o status atual (taxa de transferência e total, por padrão, eu acho - caso contrário, ver a página do usuário).
Por que outra resposta? A resposta aceita recomenda a instalação de um pacote (aposto que há uma versão para cada chipset sem precisar de um gerenciador de pacotes); a resposta mais votada recomenda a compilação de um programa em C (eu não tinha um compilador ou toolchain instalado para compilar sua plataforma de destino); o segundo top votou resposta recomenda executar o aplicativo em uma VM (sim deixe-me apenas dd sdcard interno do telefone sobre USB ou algo assim e criar uma imagem de caixa virtual); o terceiro sugere modificar algo na seqüência de inicialização que não preenche a RAM como desejado; o quarto só funciona na medida em que o ponto de montagem / dev / shm (1) existe e (2) é grande (remontar precisa de raiz); o quinto combina muitos dos acima sem código de exemplo; o sexto é uma ótima resposta, mas eu não vi essa resposta antes de criar minha própria abordagem, então eu pensei em adicionar a minha, também porque é mais curto para lembrar ou digitar se você não vê a linha do memblob é realmente o cerne da questão; o sétimo novamente não responde à pergunta (usa ulimit para limitar um processo); o oitavo tenta fazer você instalar o python; o nono acha que somos todos pouco criativos e, finalmente, o décimo escreveu seu próprio programa em C ++, que causa o mesmo problema que a resposta mais votada.