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

9

Alguém pode explicar (ou conhecer 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 isso é diferente? Que valores eles podem assumir? O que eles padrão?

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

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 estão mortos? Apenas um processo ou o usuário inteiro está proibido de usar a CPU? Isso é para uma sessão ou para um tempo máximo em cada minuto?

Tentei encontrar respostas, mas tudo o que consigo encontrar é a única página de manual que quase não fornece detalhes.

myforwik
fonte
O rute é uma excelente introdução à administração do Linux - embora não forneça muitos detalhes sobre limits.conf, ele mostra onde encontrar essas informações - rute.2038bug.com/index.html.gz
symcbean

Respostas:

18
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 isso é diferente?

Existem diferentes classes de agendadores de processos no linux. O padrão (CFQ) basicamente fornece uma quantidade igual de intervalos de tempo para cada processo que deseja executar e enfileira tarefas executáveis ​​de maneira que todos esperem, em média, uma quantidade igual de tempo pela sua vez. Existem algumas exceções a essa regra, mas essa é a ideia básica.

Outra classe de agendador é o agendador em tempo real. Em tempo real é um pouco diferente, tarefas executáveis ​​na fila em um esquema de enfileiramento justo, o processo em tempo real obterá o tempo da CPU assim que necessário pelo processo, isso despeja um processo em execução da CPU para liberar espaço para o 'tempo real ' processo.

Que valores eles podem assumir?

O que a “prioridade” faz é alterar a gentileza do processo para que, no login, seu processo principal inicie com uma certa gentileza, todos os processos filhos que você gera também com a mesma gentileza.

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

Pode ser importante que os usuários de logon normais tenham uma prioridade mais baixa que os daemons que podem ser reparados, por exemplo, ou o root tenha uma prioridade mais alta no logon do que tudo o resto.

Quanto ao tempo real, a disputa é tratada com o campo 'rtprio'. Se você tiver duas tarefas em tempo real, ambas querendo executar, o valor 'rtprio' será usado para determinar qual dos processos escolher primeiro como prioridade. Um rtprio mais alto produz tarefas de prioridade mais alta.

Definir isso no limits.conf permite que as tarefas em tempo real sejam definidas em uma faixa de prioridade específica, sem a necessidade de o root definir o valor. Isso não afeta as tarefas não definidas para serem executadas usando um planejador em tempo real.

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

Quais são os padrões?

Os limites 'padrão' - tecnicamente, todos estão sendo definidos como o pid 1, a menos que seja explicitamente definido, os limites de recursos são herdados do processo pai, se nenhum limite tiver sido definido ou substituído em nenhum lugar, a herança 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 na memória; é aqui que fica o espaço para os globais, talvez alguns outros dados e memória inicializados alocados da pilha. O limite controla a quantidade máxima alocada que um processo pode receber.

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

fsize 
maximum filesize (KB) 

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

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

Quase toda a memória que um aplicativo adquiriu é 'evitável'. Ou seja, pode ser trocado. Memória bloqueada A memória nunca é trocável e permanece residente. Esse valor é estritamente controlado porque pode ser abusado por pessoas que passam fome em um sistema de memória e causa trocas. Geralmente é útil com aplicativos de segurança (que nunca desejam que suas páginas sejam trocadas - e se tornem legíveis na partição de troca).

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 NÃO é o mesmo que a quantidade de tempo decorrida desde que o processo foi iniciado. Ou seja, um limite de tempo de processamento de 1 minuto 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 SIGXCPUinterrupção que finaliza o processo. Isso pode ser capturado pelo processo pai e tratado lá.

Apenas um processo ou o usuário inteiro é impedido de usar a CPU?

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

Alguns outros truques com limites são:

  • O número máximo de processos inclui o número de threads leves.
  • O limite de RSS não faz nada e não o faz há vários anos, é inútil definir.
Matthew Ife
fonte
1

Isto é para o pam_limitsmódulo ... é setrlimit(2)e sysctl(8)valores. Minha pesquisa não revelou limites rígidos, mas as páginas de manual citadas fornecem algumas explicações.

vonbrand
fonte
1

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

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

Não se esqueça de definir os limites flexível e flexível, 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ê.

drumfire
fonte