Como escrever script eficiente para ter pico de memória (RAM)?

2

Eu tenho uma rede com alguns PCs. Eu queria ter pico da memória para cada sistema.

Eu escrevi um script para verificar a memória usada e escreve o pico em um arquivo em /tmp ; e eu configurei o script para ser executado em segundo plano quando o sistema for inicializado. Mas parece que ele usa muitos recursos como o top mostra cerca de 2 (de 8 para CPU de 8 segmentos) quando é executado.

#! /bin/bash
touch /tmp/mempeak

while true
do
     A=$(free -m | grep "Mem"|awk '{printf "%.2f",/1000-$NF/1000}')
     B=$(cat /tmp/mempeak)
     A=$(awk -va=$A -vb=$B 'BEGIN {print (a>b)?a:b }')
     echo $A > /tmp/mempeak
done

Gostaria de saber se existe outra maneira de ter esse valor de maneira eficiente.

PS. O pico de memória deve ser reinicializado quando o sistema for reiniciado e deve estar acessível a partir do servidor remoto por ssh

    
por mohammadh montazeri 16.06.2016 / 13:21

1 resposta

3

Seu script está usando muitos recursos da CPU porque é executado continuamente, o que é ineficiente. Para evitar isso, adicione uma chamada a sleep , o que significa que ela só funcionará uma vez a cada 5 segundos, o que é muito mais eficiente. Provavelmente, você pode estender isso para mais, como 60 segundos, dependendo de quão freqüente / preciso ele precisa ser.

Aqui está o que parece com esse extra sleep 5 :

#! /bin/bash
touch /tmp/mempeak

while true
do
     A=$(free -m | grep "Mem"|awk '{printf "%.2f",/1000-$NF/1000}')
     B=$(cat /tmp/mempeak)
     A=$(awk -va=$A -vb=$B 'BEGIN {print (a>b)?a:b }')
     echo $A > /tmp/mempeak
     sleep 5
done

Se você quiser evitar gravações em disco excessivas (por exemplo, para reduzir o desgaste de SSD), você pode alterar seu script para que ele grave somente no disco quando o valor realmente mudar e talvez coloque o arquivo de saída em um sistema de arquivos temporário na memória também.

    
por JonasCz 16.06.2016 / 13:29