Unix Memory Question durante o sono em segundo plano

0

Eu trabalho em um servidor Linux que não me permite usar cron . Então, para contornar isso, escrevo scripts que precisam ser executados em um momento definitivo como este:

while true
do
    ...
    ...
    sleep 1d #changes upon requirement of my script
done

Sempre inicio os scripts no plano de fundo nohup ./script.sh & .

A minha pergunta é, digamos que tenho seis / sete scripts como este em execução no servidor - na maioria das vezes eles estariam dormindo. Isso seria - sleep consumir algum tipo de memória? Isso afetará o desempenho do servidor? Existe alguma maneira eficiente de lidar com isso?

    
por mathB 01.11.2017 / 17:30

2 respostas

1

Sim - você está consumindo memória com esses scripts. Você realmente tem dois processos em execução, usando memória:

  • um shell (por exemplo, bash)
  • sleep em si.

sleep será extremamente leve, mas o shell pode consumir alguns megabytes de memória. No meu sistema um bash não interativo inativo consome ~ 1MiB e um sono 0.7MiB. Você pode verificar ps ou top (veja a coluna RSS) - embora muito desse total seja na verdade coisas como bibliotecas que são compartilhadas entre todos os processos que as utilizam. Ao todo, é provável que < 1MiB cada.

No Linux, você pode obter mais detalhes em /proc/pid/status (e /proc/pid/smaps ); os Vm* são de interesse aqui. Por exemplo:

bash -c 'grep Vm /proc/$$/status'
VmPeak:    13380 kB
VmSize:    13380 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:       972 kB
VmRSS:       972 kB
VmData:      220 kB
VmStk:       132 kB
VmExe:       208 kB
VmLib:      2320 kB
VmPTE:        48 kB
VmPMD:        12 kB
VmSwap:        0 kB

Você pode ver o total de RSS (quantidade de RAM usada) de 972 kB, dos quais 220 kB são "dados" (normalmente não compartilhados) e 132 kB são de pilha (também não compartilhados). Então, cada bash extra que sai correndo é bem pequeno.

Alguns conselhos : se você tiver que fazer um monte de soluções alternativas como essa ... por que você não pode usar o cron? Essa é uma abordagem mais simples e mais limpa, muito menos provável de ter bugs inesperados (rápido! Como o sleep 1d manipula a alteração do horário de verão? O que acontece se o seu sono retornar mais cedo porque foi SIGTERM como parte de uma reinicialização / desligamento? ). Se o seu administrador de sistema estiver preocupado com pessoas não autorizadas agendando tarefas agendadas, aponte-o para /etc/cron.allow e /etc/cron.deny ; aqueles estão documentados em crontab (1).

    
por 01.11.2017 / 18:06
1

sleep foi projetado para consumir quase nenhum recurso.

Entretanto, tenha em atenção que sleep pode ser interrompido por várias razões. Você provavelmente quer ter certeza de que não executará seus comandos (muito) antes do planejado.

    
por 01.11.2017 / 17:39