CRON Job para executar o comando em memória baixa

2

Eu tenho uma situação em que posso precisar executar uma ferramenta de linha de comando do SAP hdbsql quando a memória ficar muito baixa (para ajudar a limpar o cache de tabelas do HANA).

Eu não sou bem versado em Unix / Linux e queria saber como posso abordar isso da melhor maneira? Eu tive uma idéia para extrair o valor de memória livre do comando top (ou obter free / max * 100 para obter um%, que é melhor) em um script de shell agendado usando crontab , mas não consigo encontrar nada uma abordagem possível sobre isso em qualquer lugar, então eu não posso nem começar nada. Eu estou esperando que alguns gurus do Linux (é um servidor Linux) possam me ajudar a descobrir isso - talvez com uma melhor solução / abordagem.

    
por James Wilkins 29.05.2015 / 18:29

2 respostas

3

Você pode usar awk para calcular a porcentagem e a test utilidade para determinar se o valor excede 90 %, por exemplo. O cronjob poderia ser assim:

/usr/bin/test 90 -le $(/usr/bin/awk '$1=="MemTotal:"{t=$2} $1=="MemFree:"{f=$2} END{printf "%d", (t-f)/(t/100)}' /proc/meminfo) && command-to-cleanup

A parte awk extrai os valores necessários de /proc/meminfo e, em seguida, calcula a porcentagem de memória usada. A test de verificação verifica se 90 é menor ou igual ( -le ) ao valor calculado. A parte depois do && seria então a sua ferramenta que limpa a memória ( .. && command-to-cleanup ). Esse cronjob pode ser executado a cada minuto, por exemplo:

* * * * * root /usr/bin/test 90 -le $(/usr/bin/awk '$1=="MemTotal:"{t=$2} $1=="MemFree:"{f=$2} END{printf "%d", (t-f)/(t/100)}' /proc/meminfo) && command-to-cleanup
    
por 29.05.2015 / 18:58
2

IMHO a porcentagem da memória livre em um sistema linux NÃO é um bom indicador nessa situação por causa da maneira como o gerenciamento de memória linux funciona (a memória também é usada para buffering e cache, também há troca, etc) - muita informação lá fora, sobre o assunto. O que significa que usar esse indicador causaria a limpeza do cache mais cedo do que o necessário, o que imagino que tenha um preço no desempenho geral.

Descobri que a porcentagem de troca usada é geralmente uma indicação muito melhor do sistema estar com pouca memória, levando tudo isso em consideração: contanto que ele ainda possa alocar memória, ele tipicamente não usará a troca.

Como bônus, isso também funciona como um indicador de desempenho - um sistema que usa mais de 4G de swap, por exemplo, geralmente mal consegue rastrear (pense em quanto é necessário copiar um arquivo em disco 4G de um lugar para outro).

As informações de troca podem ser encontradas em / proc / meminfo , então a abordagem sugerida pelo caos pode ser adaptada de acordo:

SwapTotal:      16777212 kB
SwapFree:       16777212 kB

Você pode precisar experimentar um pouco para descobrir qual valor percentual de uso de troca é mais adequado para seu caso específico.

    
por 30.05.2015 / 15:10