[Cascavel-pm] Res: problemas com fork

Daniel ® Antunes danielrantunes em yahoo.com.br
Terça Julho 15 07:58:26 PDT 2008


    Oi Eden, obrigado por responder...
    Processadores chegam na média de 30% nestes horários... O server tem 5 gb e fica com 200 k livre o tempo todo, o profissional que fez a instalação fala que isto é normal. (Como o cliente fez um contrato com a empresa que forneceu o server eu não tenho muita abertura para fazer ajustes, o máximo que fiz foi anexar o serviço no /etc/init.d)
    Confesso que minha administração dos PIDs não é a ideal, acredito, uso o famoso :

$SIG{CHLD}='IGNORE';

    O trecho que faz o fork é este :

# Eternal looping
my $continue=$true;
while ($continue){
    unless (accept(LCLIENT,LSERVER)){
        $continue=$false;
        next;
    }
    # set autoflush on LCLIENT socket
    { my $ch=
        select(LCLIENT); $|=1;
        select($ch); }
    # Identify client 
    my $rid=getpeername(LCLIENT);
    unless ($rid){
        send(LCLIENT,"Not identified connection !\r\n",0);
        close(LCLIENT);
        logmsg("Could not identify client.",'notice');
        next;
    }
    my ($rport,$riaddr)=unpack_sockaddr_in($rid);
    my $rip=inet_ntoa($riaddr);
    if ($rip!~m/^$KNOW_HOSTS$/){
        send(LCLIENT,"Not authorized connection !\r\n",0);
        close(LCLIENT);
        logmsg("Not authorized client try connection to inquiry services.",'notice');
        next;
    }
    logmsg("New client at $rip:$rport.",'notice');
    # Fork process to serve multiple connections
    RECEIVER:{
        my $rpid;
        if ($rpid=fork){
            close(LCLIENT);
            next;
        }
        unless (defined($rpid)){
            if ($!==EAGAIN){
                sleep 1;
                redo RECEIVER;
            }
            else{
                logmsg("Could not fork process.",'emerg');
                exit(5);
            }
        }

    Isto foi um dos primeiros trampos que fiz em Perl, estou reestruturando o sistema paralelamente usando best practices, muitas rotinas já foram migradas e estão rodando no novo modelo, porém, esta em especifico não.
    Valeu mesmo, abraço.


Daniel ® Antunes
profissional de informática
msn daniel em daniel-antunes.com.br
mobile +55 11 8965 2999
gnu/linux user #238553



----- Mensagem original ----
De: Eden Cardim <edencardim em gmail.com>
Para: Cascavel Perl Mongers <cascavel-pm em pm.org>
Enviadas: Terça-feira, 15 de Julho de 2008 10:49:02
Assunto: Re: [Cascavel-pm] problemas com fork

2008/7/15 Daniel (R) Antunes <danielrantunes em yahoo.com.br>:
>     Bom, a questão é a seguinte; Este meu sistema usa fork para atender
> solicitações, como mencionei não dava problemas, mas agora está simplesmente
> parando de responder em horários de pico

"Parando de responder" é um pouco vago, tente ser mais específico. A
memória acaba? O processador vai a mil e não dá conta?

> a pessoa que configurou o server
> colocou a responsa nas minhas costas e eu estou meio perdido, sem saber o
> que fazer. Dei uma pesquisada na web por possíveis limites impostos pelo
> sistema em termos de multiprocessamento do script e tals. Busquei saber se o
> fork tem algum tipo de limitação neste sentido, mas simplesmente não consigo
> encontrar informações que expliquem este comportamento do script.

Meu palpite é que você não está "daemonizando" e gerenciando os
processos corretamente. Use uma das implementações de servidor
disponíveis no CPAN ou um servidor comprovadamente robusto como apache
ou lighttpd.

-- 
edenc.vox.com
_______________________________________________
Cascavel-pm mailing list
Cascavel-pm em pm.org
http://mail.pm.org/mailman/listinfo/cascavel-pm



      Novos endereços, o Yahoo! que você conhece. Crie um email novo com a sua cara @ymail.com ou @rocketmail.com.
http://br.new.mail.yahoo.com/addresses
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/cascavel-pm/attachments/20080715/9b5862b1/attachment.html>


Mais detalhes sobre a lista de discussão Cascavel-pm