Posso suspender um processo ('stress') para simular a pressão da memória menos o custo da CPU?

5

Isso é tanto uma questão sobre a suspensão de processos / SIGSTOP quanto sobre stress

Estou usando o estresse para simular a pressão da memória no meu sistema.

stress --vm X --vm-bytes YM

Isso funciona bem, mas percebo que consome muito CPU.

root@ET0021B703EB23:~# ps -aux | grep stress
root     11800  0.0  0.0   2192   232 pts/4    S+   15:21   0:00 stress --vm 1 --vm-bytes 10M
root     11801 83.5  0.2  12436  2436 pts/4    R+   15:21   0:03 stress --vm 1 --vm-bytes 10M

Agora, a carga da CPU não é algo com que quero me preocupar neste teste. Eu usei Ctrl + Z para suspender meu stress , e agora vejo que a CPU consumida caiu mas a memória permanece, que é o que eu queria.

root@ET0021B703EB23:~# ps -aux | grep stress
root      9080  0.0  0.0   2760   296 pts/2    S+   15:18   0:00 grep stress
root     17030  0.0  0.0   2192   172 pts/2    T    14:51   0:00 stress --vm 1 --vm-bytes 10M
root     17031  2.7  0.4  12436  4860 pts/2    T    14:51   0:44 stress --vm 1 --vm-bytes 10M

Pelo que entendi, manter um processo suspenso irá mantê-lo na memória. Posso, portanto, usar esse método para simular com segurança a pressão da memória sem o custo da CPU?

Minha preocupação é se existe algo no linux que mate, ou de outra forma remova o impacto da memória, um processo suspenso sob pressão de memória ou algo do tipo (como o lowmemorykiller do Android). Existe tal coisa, ou existe alguma razão pela qual isso não funcionaria?

    
por Eric S. 14.11.2016 / 21:25

1 resposta

3

Eu encontrei artigo da Oracle sobre o OOM Killer ( Out of Memory Killer) responda a metade da sua pergunta, especialmente no capítulo 'Configuring the OOM Killer'. Eu extraí de lá dois comandos importantes (eu acho):

  1. Desativar matador de OOM root@host:~# sysctl vm.overcommit_memory=2
  2. Excluir um processo do OOM Killer root@host:~# echo -17 > /proc/<pid>/oom_adj

Outra resposta muito interessante é 1.4 em esta FAQ do stress página do projeto, diz:

1.4 Why is my CPU getting hammered but not my RAM?

This is because stress if faily conservative in its default options. It is pretty easy to render a system temporarly unusable by forcing the virtual memory manager to thrash. So make sure you understand how much memory you have and then pass the appropriate options. On a dual-core Intel system with 3 GB of RAM a reasonable invocation is this:

stress -m 1 --vm-bytes 2G

Certo, sua pergunta ainda não foi respondida. Vamos olhar para manual de stress ...


-c, --cpu N
    spawn N workers spinning on sqrt()

Talvez a opção acima possa ajudar, tente colocá-lo em zero. Opa, não funciona!

Depois de uma olhada no código, notei que esta opção está desabilitada por padrão. E também notei que a opção - vm-hang pode ser o que você deseja.

A ação padrão de - vm está girando em malloc () / free (), e é um uso intensivo da CPU! - vm-hang faz o programa stress fazer uma pausa por segundos toda vez que ele aloca até free () .

Tente usar o seguinte (consome ~ 128MB de RAM):
root@host:~# stress --vm 1 --vm-bytes 128000000 --vm-hang 3600
E faça um teste em outro terminal:
root@host:~# top

    
por 14.11.2016 / 23:05