Como impedir que os usuários executem programas pesados da CPU em um servidor?

6

Eu tenho um servidor de 24 núcleos, ao qual os usuários se conectam por meio do SSH.

Não é para eles rodarem programas pesados como o MATLAB , R ou seus próprios scripts que realizam simulações ou coisas do tipo.

Existem maneiras de detectar e kill -9 processos pesados da CPU automaticamente?

    
por Sandra 04.11.2011 / 14:58

2 respostas

3

Você deve usar cgroups para fazer isso.

Veja "man cgrules.conf" e "man cgconfig.conf".

As versões posteriores do systemctl no fedora devem suportar a inserção de usuários diretamente em um cgroup, para que você possa fazer melhor assim.

Isso não limitará a CPU no sentido de que, se houver recursos disponíveis da CPU (que ninguém está usando), ela usará toda a CPU, mas outra coisa também exigirá que aloque uma parte da CPU baseada na configuração valor "cpu.shares".

Além disso, conforme sugerido, colocar um ulimit no tempo da CPU garantirá que um processo em execução receba um número considerável de jiffies antes de ser eliminado por usar muita CPU. Isso pode impactar negativamente os processos de execução longa que um usuário está usando e que, durante um longo período de tempo, acumularam um certo número de jiffies naturalmente.

Você também pode usar o cgroups para garantir que todos os processos de um usuário vivam apenas em um de seus núcleos, para que você possa pelo menos garantir que, se uma CPU estiver sobrecarregada, ela não terá impacto negativo resto dos processos dos sistemas operacionais.

O CGroups também é uma ótima maneira de limitar o uso da memória. Você pode combiná-lo com pam_limits para evitar o bombardeio do garfo.

Edit: Eu também devo apontar o que eu acho que você está pedindo não é necessariamente relevante. Ter 1 processo consumindo 100% da CPU não é necessariamente ruim, fornecendo tempo para que outros processos sejam executados. O programador completamente justo no linux garante esse comportamento de qualquer maneira.

Se a CPU estiver apenas inativa, não há nada errado com um processo usando toda a CPU. Seu problema só vem quando vários processos estão exigindo tempo de CPU e um dos processos está monopolizando a CPU. É aqui que os cgroups devem ser benéficos, pois permite controlar quanto tempo de CPU você alocará em diferentes processos no caso de contenção da CPU.

    
por 06.11.2011 / 17:52
6

Você pode limitar o uso dos recursos dos usuários com o PAM.

Eu nunca tentei, então não faço ideia se funciona corretamente ou não ...

    
por 04.11.2011 / 15:04

Tags