No limite

By | October 18, 2009

Na empresa fornecemos “software as service” para centenas de clientes que preferem ter tudo gerenciado por nós do que ter que lidar com a dor-de-cabeça que é gerenciar sistema operacional + aplicação. É um modelo muito bom pois pagam uma mensalidade e tem o serviço disponível o tempo todo, assim como pagamos mensalidade de eletricidade, telefone e água.

Do nosso lado também é bom, pois fica mais fácil garantir a qualidade do hardware, acesso fácil aos servidores e sem nenhum nego fução mexendo em configuração e fazendo caquinha.

Um dos problemas de gerenciamento, porém, é quando você tem diversos clientes diferentes na mesma máquina e um deles monopoliza o tempo de processador. Isso acontece muitas vezes devido a  clientes fazendo teste em ambiente de produção, relatórios enormes sendo rodados em dias críticos ou simplesmente por bugs no software que fazem um processo chupar 100% de CPU.

Uma solução que achei recentemente foi o cpulimit, que consegue limitar o tanto de CPU que um processo usa diminuindo o problema causado por ele em caso dele começar a descer a ladeira sem freio.

O chato dele é o fato de que você precisa especificar qual processo deseja limitar e num ambiente como o nosso, onde novos processos aparecem e morrem o tempo todo, é preciso automatizar.

Acabei criando o script abaixo, que ainda precisa ser muito trabalhado, mas estou já publicando na esperança de conseguir algum bom feedback em como melhorá-lo. Não me entendam errado: ele já funciona.

Download aqui: limitcpu.py

2 thoughts on “No limite

  1. andreyevbr

    ops, não li o script todo, nem sou um ás do python, mas por que não fazer um wrapper dos aplicativos? algo mais ou menos assim:

    #!/bin/bash

    [ $0 == /usr/bin/firefox ] && LIMIT=50
    [ $0 == /usr/bin/virtualbox ] && LIMIT=20

    $0.real $@ &
    /usr/bin/cpulimit -p $! -l $LIMIT -z &

    KIS! 😉

  2. Eri Post author

    A idéia é boa, mas no nosso caso não adianta, pois a maior parte dos processos são disparados por outros processos, daemons, inittab, cronjobs… isso em centenas de clientes e dezenas de servidores.

    “Personalizar” o disparo de cada processo passaria muito muito longe de KISS…

    Mas sim, no caso de coisas simples como o firefox ou VirtualBox faz sentido.

Comments are closed.