Explicação do Linux /etc/security/limits.conf

8

Alguém pode explicar (ou saber de uma fonte) que fornece detalhes sobre os itens no limits.conf? A página do manual não fornece muitos detalhes.

Por exemplo, diz:

rtprio 
maximum realtime priority allowed for non-privileged processes (Linux 2.6.12 and higher) 

priority 
the priority to run user process with (negative values boost process priority) 

Como são diferentes? Quais valores eles podem tomar? O que eles padrão para?

Alguns dos itens são óbvios, mas onde posso encontrar explicações melhores (valores padrão, intervalos, o que eles realmente significam, etc.) de:

data 
maximum data size (KB) 

fsize 
maximum filesize (KB) 

memlock 
maximum locked-in-memory address space (KB) 

cpu 
maximum CPU time (minutes) 

nice 
maximum nice priority allowed to raise to (Linux 2.6.12 and higher) values: [-20,19] 

O que acontece quando a CPU é excedida? Os processos são mortos? Apenas um processo ou o usuário inteiro é proibido de usar a CPU? Isso é para uma sessão ou por um tempo máximo em cada minuto?

Eu tentei encontrar respostas, mas tudo o que posso encontrar é a página de um homem que quase não fornece detalhes.

    
por myforwik 13.03.2013 / 23:09

3 respostas

17
rtprio 
maximum realtime priority allowed for non-privileged processes (Linux 2.6.12 and higher) 

priority 
the priority to run user process with (negative values boost process priority) 

Por que eles são diferentes?

Existem diferentes classes de agendadores de processos no linux. O padrão (CFQ) basicamente fornece uma quantia igual de fatias de tempo para cada processo que deseja executar e enfileira as tarefas executáveis de tal forma que todos esperem em média uma quantia igual de tempo para a sua vez. Algumas exceções a essa regra existem, mas essa é a idéia básica.

Outra classe de agendador é o agendador em tempo real. Em tempo real é um pouco diferente, em vez de executar tarefas executáveis em um esquema de enfileiramento justo, o processo em tempo real irá obter o tempo de CPU assim que for necessário pelo processo, evitando um processo de execução da CPU para liberar espaço para o tempo real 'processo.

Quais valores eles podem adotar?

O que 'prioridade' faz é alterar a gentileza do processo, de modo que, no login, o seu processo principal comece com uma certa gentileza, qualquer processo filho que você gerar também começará com a mesma gentileza.

Isso tem o efeito de aumentar a probabilidade de ser agendado em favor de outros processos concorrentes e a experiência do usuário pode ser mais responsiva / interativa para os valores de baixa nicencia e menos responsiva / interativa se a gentileza for levantada.

Pode ser importante para usuários normais de login ter uma prioridade mais baixa do que daemons que podem ser reparados, por exemplo, ou root ter uma prioridade mais alta no login do que todo o resto.

Quanto a tempo real, a disputa é tratada com o campo 'rtprio'. Se você tem duas tarefas em tempo real que quer rodar, então o valor 'rtprio' é usado para determinar qual dos processos escolher primeiro a prioridade. Um rtprio maior produz tarefas de maior prioridade.

Configurar isso no limits.conf permite que tarefas em tempo real sejam configuradas em uma determinada faixa de prioridade sem a necessidade de raiz para definir o valor. Isso não tem efeito em tarefas não configuradas para execução usando um planejador em tempo real.

O valor 'legal' deve fazer o mesmo que 'rtprio', mas para o agendamento padrão do CFQ. Eu nunca tentei embora. Ele define o processo inicial gerado quando o PAM está definindo esses limites para aquele bom valor, um usuário normal pode então ir para um nível bom ou mais alto sem precisar de root para defini-los. Se você não renunciar explicitamente, isso significa que todos os processos gerados a partir de um shell desse login (por exemplo) herdarão o valor agradável definido no arquivo limits.conf do processo pai que foi inicialmente criado.

Quais são os padrões?

Os limites 'padrão' - tecnicamente são todos definidos como pid 1 a menos que explicitamente definidos, os limites de recursos são herdados do processo pai, se nenhum limite tiver sido definido ou substituído em qualquer lugar, a herança de init é o padrão.

Outros valores

data 
maximum data size (KB) 

Quando um processo é inicializado, ele aloca alguma memória conhecida como 'segmento de dados' quando o processo é copiado para a memória, é onde o espaço para globals, talvez alguns outros dados inicializados e memória alocada do heap, vive. O limite controla a quantidade máxima alocada que um processo pode levar.

É improvável que você tenha atingido esse limite porque o malloc () raramente usa excessivamente o segmento de dados para armazenar dados.

fsize 
maximum filesize (KB) 

Isso literalmente define o tamanho máximo que um arquivo pode ser gravado como com esse usuário.

memlock 
maximum locked-in-memory address space (KB) 

Quase toda a memória que um aplicativo adquiriu é "removível". Isso pode ser trocado. Memória bloqueada memória nunca é trocável e permanece residente. Este valor é estritamente controlado porque pode ser abusado por pessoas para privar um sistema de memória e causar troca. Normalmente é útil com aplicativos de segurança (que nunca querem que suas páginas sejam trocadas - e se tornem legíveis a partir da partição swap).

cpu 
maximum CPU time (minutes) 

Isso representa a quantidade total de tempo que um processo pode consumir em uma CPU. Um processo que excede esse valor é eliminado. Observe que isso NÃO é o mesmo que o tempo decorrido desde o início do processo. I.E Um limite de 1 minuto para o cputime levaria 1 minuto para ser consumido se o processo tivesse 100% de utilização da CPU, mas 2 minutos para consumir se o processo usasse 50% de utilização.

O que acontece quando a CPU é excedida?

O processo recebe um sinal de kill SIGXCPU que encerra o processo. Isso pode ser capturado pelo processo pai e manipulado lá.

Apenas um processo ou o usuário inteiro é vinculado usando a CPU?

Quase todos os limites mencionados são tratados por processo. Tempo de CPU incluído. Os únicos que não são acredito que sejam o número total de logins e o número total de processos por esse usuário.

Algumas outras gotches com limites são:

  • Os processos máximos incluem o número de threads leves.
  • O limite de RSS não faz nada e não tem por muitos anos, é inútil definir.
por 14.03.2013 / 02:10
1

Isso é para o módulo pam_limits ... é setrlimit(2) e sysctl(8) . Minha pesquisa não revelou nenhum limite rígido, mas as páginas do manual citadas fornecem algumas explicações.

    
por 13.03.2013 / 23:41
1

Respostas rápidas são boas respostas, então aqui vai.

  • Descubra os valores mínimo e máximo das prioridades com schedtool -r ; e
  • consulte os limites atuais com ulimit -a .

Não se esqueça de definir os limites de hardware e software, mesmo que tenham o mesmo valor. Nos meus testes, essa era a única coisa que mostraria uma diferença no comando ulimit.

Espero que isso ajude você.

    
por 10.11.2014 / 04:33