[FUG-BR] Script perl consome muito CPU

2010-08-17 Por tôpico Fernando Buzon Macedo
Ola pessoal, não sei se alguém já utilizou isso, mas eu vi no contrib do
dansguardian um script Perl que funciona com FIFO, a cada modificação no
arquivo ele faz um insert no banco, o script é esse ai em baixo.

 

Tenho uma aplicação em php pra gerenciar o dansguardian e esse script foi
fundamental na parte de debugar os acessos/permissões. Está rodando, o
servidor não está lento, mas...

 

Eu monitoro com o cacti, no CPU-usage, bate 150, processamento como “user”
agora estou executando ele com o comando “nice”, ele baixou o processamento
do “user” mas agora apareceu o “nice”, mas o total não abaixa.

Pelo que li o “nice” é pra setar prioridades e não pra limitar o
processamento, sendo assim ele realmente não vai baixar o consumo.

 

Será que teria algo a fazer? Pra limitar esse consumo? Ou eu que não devo me
preocupar com isso já que agora com o “Nice” ele tem prioridade baixa sobre
os demais processos?

 

Apesar que tem acesso pra caramba, pra vcs terem uma idéia, eu rotaciono o
log diariamente e o arquivo diário, sem compactar dá em média 90MB.

 

Obrigado a todos.

Fernando - “O Punk nunca morre!”

 

sqllogfifo.pl===
=

#!/usr/local/bin/perl -w

 

use IO::File;

use DBI;

use strict;

 

my $server=192.168.x.x;

my $port=3306;

my $user=filter;

my $pass=x;

my $db=filter;

my $table=log;

 

my
$dbh=DBI-connect(DBI:mysql:database=$db;host=$server;port=$port,$user,$pa
ss) or die Can't connect to db: , DBI-errstr;

my $sth=$dbh-prepare(INSERT INTO
$table(datetime,ident,ip,url,what,how,size,why,type,filter)VALUES(?,?,?,?,?,
?,?,?,?,?));

open(FIFO,  /var/log/dansguardian/access.log) or die Can't open log
FIFO: $!\n;

LOG: while (1) {

my $message = FIFO;

next LOG unless defined $message;

chomp $message;

chop $message;

$message = substr $message,1;

 
my($dt,$id,$ip,$url,$what,$how,$size,$a,$why,$c,$d,$type,$f,$filter)=split
/,/,$message;

 
$sth-execute($dt,$id,$ip,$url,$what,$how,$size,$why,$type,$filter);

}

fim=
=

-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd


Re: [FUG-BR] Script perl consome muito CPU

2010-08-17 Por tôpico Rafael Henrique Faria
2010/8/17 Fernando Buzon Macedo ferna...@bebedouro.sp.gov.br


 LOG: while (1) {


Bom dia Fernando.
O problema, é esse while (1)

O código do script é realmente compacto, ele não realiza processamento.
Então, ele não deveria, e não poderia consumir CPU.
Porém, como ele está em um loop infinito, ele acaba consumindo CPU.

O que você pode fazer, é melhorar esse script, com outras formas de obter os
dados. Eu não conheço PERL, por isso não posso ajudar muito, mas posso dar
uma sugestão:

   next LOG unless defined $message;

Nessa parte do código, em vez de já pular para o loop novamente quando não
existir nenhum dado a ser processado, poderia ser dada uma pausa... de 1
segundo por exemplo. Iria diminuir drasticamente o processamento.


-- 
Rafael Henrique da Silva Faria
-
Histórico: http://www.fug.com.br/historico/html/freebsd/
Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd