OOM - mata um processo do usuário com maior consumo de memória?

2

Eu tenho um sistema multiusuário, no qual os usuários ativos devem ter uma parcela justa da memória disponível.

Posso configurar o Linux para eliminar um processo do usuário com o maior consumo total de memória?

Isso acontecerá quando o sistema estiver sem memória. Suponho que o maior dos processos desse usuário deve ser morto.

Eu não quero definir limites de memória para os usuários, já que o número deles varia e porque haveria perda de memória se a maioria dos usuários não estivesse funcionando. Matar o maior processo funcionaria, mas deveria ser por usuário. Caso contrário, um usuário pode gerar muitos processos pequenos e fazer com que o processo médio de outro usuário seja eliminado.

    
por Gerenuk 08.03.2016 / 13:16

1 resposta

0

O abaixo irá matar o processo usando a maior parte da memória na caixa. É isso que você estava procurando, ou tem que ser o processo do usuário que está usando a maior parte da memória (o que pode não ser o maior infrator e a razão da falta de memória)?

#!/bin/bash

free='awk '/^Mem/ {print $3}' <(free -m)'

psout='ps axo pid,args,pmem,rss,vsz --sort -pmem,-rss,-vsz | head -2'
pid='echo $psout | cut -d " " -f 6'

if (( $free < 1 )); then

kill -9 $pid

fi;

Editar: vejo seu raciocínio agora, tentarei modificar o código acima.

Edit 2: Já que eu não tenho que completar este projeto hoje, deixe-me colocar você no caminho certo. Você pode fazer o download do smem (script python) na URL abaixo: link

A opção Executar como root com -u fornecerá a quantidade total de memória usada por cada usuário. Agarre isso em uma matriz, ordene por mem usado, então apenas adicione a -u ao comando ps acima para matar o pior agressor daquele usuário.

    
por 08.03.2016 / 16:37