Limitando o uso de CPU / IO para serviços linux

2

Eu vi o EXIM travar um sistema quando ele é carregado por 10000s de e-mails de um usuário / script. Eu queria saber se havia uma maneira de limitar seu uso em um sistema e proteger o sistema ou serviço contra abusos.

    
por Tiffany Walker 17.09.2012 / 21:22

3 respostas

3

Existem algumas coisas que o exim pode fazer para reduzir a carga.

  1. Detecte carga alta e exim fila o grande número de mensagens recebidas geradas pelo script em vez de tentar entregá-lo. As seguintes opções são relevantes para isso:
    queue_only_load         no immediate delivery if load is high
    queue_only_load_latch   don’t re-evaluate load for each message
    queue_only_override     allow command line to override
    
  2. Você provavelmente está acostumado a usar o exigrep para extrair informações do seu arquivo /var/log/exim/main.log (ou qualquer nome para sua distro). O Exim também mantém, por padrão, uma cópia por mensagem desse log, agrupando os registros de mensagens de cada mensagem em um único arquivo, excluindo-os quando a mensagem é entregue. Você pode visualizá-los para uma única mensagem com 'exim -Mvl QUEUEID'. Ou apenas desligue:

    On a heavily loaded system, it may be desirable to disable the use of per-message logs, in order to reduce disk I/O. This can be done by setting the message_logs option false.

  3. Teste usando o syslog para fazer login em um servidor remoto em vez de localmente. Isso reduzirá um pouco a E / S do disco, embora eu ache que ele será menor em comparação com a E / S causada pelo grande volume de criação de e-mail e tal.
  4. Quando você terminar de injetar e-mails no servidor de e-mail, o carregamento será interrompido. Nesse ponto, inicie um monte de corredores de fila. O Exim é conhecido por ser lento para entregar mensagens da fila, mas se você tiver carga baixa, não há nada errado em iniciar processos de entrega suficientes para executar a fila e entregar o email mais rápido ... até o ponto em que sua carga se torne inibida ( normalmente indica que a utilização de E / S do disco está atingindo a saturação). Tente criar 10 corredores de fila por vez. Eu suspeito que você provavelmente poderia fazer 100 ou 150 sem uma carga excessiva. 'iostat -x -d 1' é seu amigo para garantir que o disco I / O seja ou não um gargalo.
  5. Verifique o DNS tanto para frente quanto reversa para o seu servidor de e-mail de saída. Verifique se o IP que os servidores destinatários veem é o mesmo que você acha que é e que também deve ser frente e verso resolúvel, senão você terá lentidão como os destinatários fazem pesquisas DNS no seu IP (para seus logs e tal).
por 20.09.2012 / 18:04
1

Eu sugiro que você verifique as ferramentas 'nice' e 'ionice' para reduzir o impacto do processo exigente no uso da CPU e outras para reduzir o impacto nas tarefas de IO. (O agendador CFQ precisa ser usado se você não quiser usar a ionização para limitar a taxa de transferência de disco)

Como alternativa, você pode verificar o subsistema cgroups do kernel. Os cgroups suportam a criação de limites de memória rígidos e suaves, bem como a otimização do uso do disco. (O agendador CFQ precisa ser usado para otimização do uso do disco)

    
por 18.09.2012 / 00:08
0

Você pode ser capaz de fazer o que for necessário com Limites do PAM ( /etc/security/limits.conf ) ou ulimit .

    
por 17.09.2012 / 22:08