Como verificar o uso ulimit

22

Existe alguma maneira de verificar o uso dos ulimits para um determinado usuário? Eu sei que você pode alterar ulimits para um único processo quando você o inicia ou para um único shell ao executar, mas eu quero ser capaz de "monitorar" o quão perto o usuário está de atingir seus limites. Estou planejando escrever um script bash que reportará para o statsd a porcentagem atual de uso. Especificamente, quero acompanhar:

  1. arquivos abertos ( ulimit -n )
  2. processos de usuário máximos ( ulimit -u )
  3. sinais pendentes ( ulimit -i )

O que eu quero é a porcentagem de uso (0-100).

    
por hazmat 17.09.2015 / 19:26

3 respostas

13

Talvez isso ajude para a primeira pergunta:

Se você conhece as identificações de processo (PIDs) do usuário específico, pode obter os limites de cada processo com:

cat /proc/<PID>/limits

Você pode obter o número de arquivos abertos para cada PID com:

ls -1 /proc/<PID>/fd | wc -l

E, em seguida, basta comparar o valor de Max open files com o número de descritores de arquivos abertos do segundo comando para obter uma porcentagem.

    
por 08.06.2016 / 11:02
7

Exiba a porcentagem atual de usuários de arquivos abertos, proc e sinais pendentes, por vários métodos inconvenientes e ferramentas padrão:

paste <(grep 'open files\|processes\|pending signals' /proc/self/limits | 
        cut -c27-38) \
      <(i='whoami' ; lsof -u $i | tail -n +2 | awk {'print $9'} | wc -l; 
                     ps --no-headers -U $i -u $i u | wc -l ; 
                     ps -u $i -o pid= | xargs printf "/proc/%s/status\n" |
                                        xargs grep -s 'SigPnd' |
                                        sed 's/.*\t//' | paste -sd+ | bc ; ) |
while read a b ; do echo $((${b}00/a))%; done

Saída no meu sistema:

59%
9%
0%

Supondo que esses números sejam bons, o que essa resposta mostra é que isso pode ser feito no shell, mas provavelmente não deveria, a menos que haja métodos de shell muito melhores. Em vez disso, este Q seria melhor feito com gcc , ou python , etc.

    
por 11.12.2017 / 04:48
-3

Ulimits são propriedades de processos e são herdadas de processos filhos.

Você não pode obter os limites para outro processo.

    
por 17.09.2015 / 22:32