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 ao inicializá-lo ou para um único shell durante a execução, mas eu quero poder "monitorar" o quão perto um usuário está de atingir seus limites. Estou pensando em escrever um bash
script que reportará de volta a statsd a porcentagem de uso atual. Especificamente, eu quero acompanhar:
- abrir arquivos (
ulimit -n
) - processos máximos de usuários (
ulimit -u
) - sinais pendentes (
ulimit -i
)
O que eu quero é a porcentagem de uso (0-100).
Respostas:
Talvez isso ajude na primeira pergunta:
Se você conhece os IDs do processo (PID) do usuário específico, pode obter os limites de cada processo com:
Você pode obter o número de arquivos abertos para cada PID com:
E então basta comparar o valor de
Max open files
com o número de descritores de arquivos abertos do segundo comando para obter uma porcentagem.fonte
Gera a porcentagem atual de arquivos abertos, proc e sinais pendentes do usuário, por vários métodos inconvenientes e ferramentas padrão:
Saída no meu sistema:
Supondo que esses números sejam bons, o que esta resposta mostra é que isso pode ser feito no shell, mas provavelmente não deveria, a menos que haja métodos shell muito melhores. Em vez disso, esse Q seria melhor feito com
gcc
, oupython
, etc.fonte
Ulimits são propriedades de processos e são herdados para processos filhos.
Você não pode obter os limites para outro processo.
fonte
man lsof
,man ps
, ...lsof
mantenedor, com certeza. Mas não é relevante para o usuário final. Também incorreto no contexto desta pergunta, pois está perguntando especificamente sobre o Linux, que possui interfaces documentadas (man proc
).-1