um forro para obter o uso de memória

2

Procurando fazer um forro para informar a quantidade total de memória livre no sistema, incluindo swap e cache.

free -t não é uma opção, por isso tenho que fazer uma soma dos valores na coluna livre.

Não sei como posso obter os valores; se eu usar awk , como posso referenciar números diferentes em linhas diferentes (livre Mem é $3 , enquanto o espaço de troca livre, por exemplo, em uma linha diferente, é $4 )?

    
por johndoe12345 01.10.2015 / 15:40

3 respostas

1

no debian que tenho na minha frente agora, free -t mostra uma Total: row:

             total       used       free     shared    buffers     cached
Mem:       8197980    2583348    5614632          0     222508    1904352
-/+ buffers/cache:     456488    7741492
Swap:      7807584          0    7807584
Total:    16005564    2550180   13455384

Se você precisar dessa linha, poderá usar tail e awk para obter os valores.

No entanto, se o seu free não mostrar essa linha, você poderá usar o awk com RS="" para unir as linhas:

free | awk -v RS="" '{print $10 "+" $17 "+" $21}' | bc

Se o layout da coluna do seu free for diferente do meu, talvez você precise mexer nos números dos campos.

Explicação: O campo RS é o separador de registro. Configurar isso para "" une todas as linhas na saída de livre, então awk pode referenciá-las como se estivessem em uma 'linha'.

Contando desde o início, $1 to $6 são os cabeçalhos da coluna, $7 é o Mem: cabeçalho da linha, $8 to $10 são os valores nessa linha ... Portanto $10 é o valor de memória livre. Isso é feito de maneira semelhante para os seguintes valores:

             total       used       free     shared    buffers     cached
Mem:            $8         $9        $10        $11        $12        $13
-/+ buffers/cache:        $16        $17
Swap:          $19        $20        $21

O comando awk {print $10 "+" $17 "+" $21} basicamente une esses valores com + entre e a saída é canalizada para bc para calcular a soma.

    
por 01.10.2015 / 16:00
1

talvez isso possa ser uma alternativa para free

cat /proc/meminfo | grep -e MemFree -e Buffers -e SwapFree | gawk 'BEGIN{s=0}{s+=$2}END{print s}'

    
por 01.10.2015 / 16:10
1

Você pode executar free e depois analisar a saída, como

free | awk '{print $4}' | tail -3 | sed '2d' |paste -sd+ | bc
    
por 01.10.2015 / 15:55