Limitando o processo específico para apenas um por usuário

1

Meus scripts estão usando wget para recuperar dados da Internet. Quando muitos usuários estão usando este script, recebi uma carga muito alta (cerca de 20,00), devido à E / S do disco. O wget é iniciado automaticamente a cada hora pelo cron. Eu gostaria de limitar um wget a um cliente ao mesmo tempo. Como fazer isso?

Estou usando o CentOS 5.7 de 64 bits.

    
por Spacedust 13.02.2012 / 15:48

3 respostas

2

Você pode adicionar um bloqueio de arquivo ao seu script. Por exemplo, com o comando flock (pacote util-linux no Debian):

$!/bin/sh
(
    flock --nb 200 || echo "waiting for previous script completion"
    flock 200

    # script commands here
    wget ....

) 200>$HOME/.wgetlock
    
por 13.02.2012 / 21:35
1

Confira as opções disponíveis para você em /etc/security/limits.conf . Você pode definir limites por processo e memória por usuário.

    
por 13.02.2012 / 15:54
1

Se o mesmo pedido e conteúdo forem repetidos, basta armazenar em cache o resultado por alguns segundos e exibir o mesmo conteúdo para diferentes usuários.

Você pode usar o memcache para implementar isso com bastante facilidade.

Se o conteúdo diferir por usuário, saiba que o enfileiramento, como você pergunta, causará longos atrasos.

    
por 13.02.2012 / 21:58