Olá Marco, obrigado pela resposta.<br><br>Eu até que consegui fazer "mal e porcamente" um script em shell, usando output de comandos<br>que conhecia "ps, netstat, etc" , nao é um obra de arte mas conseguia extrair as inforamaçoes que usei
<br>para saber onde estava o problema.<br><br>Mas como as vezes o "load avarage" e cpu do servidor estavam altos, o output ficava deturpado devido ao delay de resposta.<br><br>Vou testar esse seu codigo e agregar alguma coisa que já fiz (em perl tambem), muitissimo obrigado.
<br><br>Ah um outro fato que contribui para o caos é que o DBA, responsavel pelo banco é um grande<br>sacana que não me ajuda muito. Alias, ha muito tempo o problema já não está em minhas mãos,<br>mas como ninguém faz nada ... de qualquer forma é uma boa oportunidade para aprender alguma coisa.
<br><br><br><br><br><br><div><span class="gmail_quote">Em 21/01/07, <b class="gmail_sendername">Marco A P D'Andrade
</b> <<a href="mailto:mdacwb@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">mdacwb@gmail.com</a>> escreveu:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Cristiano,
<br><br>Bem, devidamente explicada sua situação e dificuldades, já com as<br>sugestões do Nilson, seu questionamento me chamou a atenção, então<br>estou quebrando meu silêncio de férias ;)<br><br><br>O que vc precisa será basicamente extraído de aplicativos básicos do
<br>*nix, e é claro... manipulado para produzir as informações relevantes:<br><br>ps -C httpd<br>- Lista todos os processos HTTPD (apache) ou outro que porventura seja<br>criado com o Kylix, isso vc terá de descobrir!<br>
<br># ps -C httpd | head<br> PID TTY TIME CMD<br> 9011 ? 00:04:12 httpd<br>21582 ? 00:02:00 httpd<br>11717 ? 00:00:34 httpd<br> 1381 ? 00:01:30 httpd<br> 8005 ? 00:02:15 httpd
<br>
<br><br>lsof -p <pid><br>- Lista todos os filehandles abertos, sejam eles locais ou tcp, sendo<br>que lhe interessaria somente as conexões TCP:<br><br># lsof -n -p 13581 | grep TCP<br>httpd 13581 web 6u IPv4 631869262 TCP
<br>200.x.y.z:59927->200.x.y.b:mysql (ESTABLISHED)<br>httpd 13581 web 20u IPv4 525847182 TCP *:https (LISTEN)<br>httpd 13581 web 21u IPv4 525847183 TCP *:http (LISTEN)<br><br>De resto, é fazer o código Perl propriamente...
<br><br>Segue um esboço não testado...<br><br>#!/usr/bin/perl -w<br>#<br>use strict;<br> my ( $pid, @pid, $mysql, $http );<br><br> unless ( open(PS, "ps -C httpd |") ) {<br> print "Falha ao abrir PS: $!\n";
<br> exit 1;<br> }<br><br> while ( defined( $_ = <PS> ) ) {<br> ( $pid ) = /^\s+(\d+)\s+/;<br> next unless ( $pid );<br><br> unless ( open(LSOF, "lsof -p $pid | grep TCP") ) {<br> print "Falha ao verificar open files para $pid: $!\n";
<br> next;<br> }<br> $http=0; $mysql=0;<br> while ( defined( $_ = <LSOF> ) ) {<br> if ( /:http/ ) {<br> $http=1;<br> } elsif ( /:mysql/ ) {<br> $mysql=1;
<br>
}<br> }<br> unless ( $mysql && $http ) {<br> push(@pids, $pid);<br> } else {<br> $full++;<br> }<br> }<br><br> if ( @pids ) {<br> printf "Foram identificados %s processos sem acesso simultaneo e
<br>%s em ambos.\n",<br> scalar(@pids), $full;<br> } else {<br> printf "Foram identificados apenas %s processos, sem acesso a<br>banco!\n", $full;<br> }<br><br> exit 0;<br><br>#--------------
<br><br>PS: Observe que utilizei mysql em vez de oracle, mas isto é apenas<br>para seguir o meu ambiente... não quiz acessar os servidores com que<br>usam banco oracle ... ;)<br><br>Outra abordagem, que pode ser mais interessante, seria vc listar todas
<br>as conexões com seu banco de dados, e a partir disto identificar os<br>processos que as mantem:<br><br><br># netstat -na | grep :3306 | grep ESTAB<br> >> Lista todas as conexões de rede, isola somente os ips desejados,
<br>conexões ativas tcp 0 0 200.x:59701 200.y:3306<br> ESTABLISHED<br>tcp 0 0 200.x:59471 200.y:3306 ESTABLISHED<br>tcp 0 0 200.x:59459 200.y:3306 ESTABLISHED
<br>tcp 0 0 200.x:59530 200.y:3306 ESTABLISHED<br>tcp 0 0 200.x:59574 200.y:3306 ESTABLISHED<br>tcp 0 0 200.x:59614 200.y:3306 ESTABLISHED<br>
tcp 0 0 200.x:60223 200.y:3306 ESTABLISHED<br><br>root@webmail1(click21):~# fuser -n tcp 59701<br> >> Verifica qual processo está utlizando a porta TCP localmente<br>59701/tcp: 13709
<br><br>root@webmail1(click21):~# ps -p 13709<br> >> responde QUAL é o processo<br> PID TTY TIME CMD<br>13709 ? 00:01:12 httpd<br><br><br>Bem, creio que já divaguei demais em administração e de menos em Perl,
<br>mas a ideia é só ajudar né !<br><br>PS: sugiro também verificar na linguagem a existencia/uso de pool de<br>conexões com o banco, ou o encerramento pelo lado do servidor para<br>conexões inativas a partir de X minutos!
<br><br><br>Sds,<br>Marco Antonio<br>Rio-PM<br><br><br>2007/1/20, Cristiano Torres <<a href="mailto:listas.perl@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">listas.perl@gmail.com</a>
>:<br>> Caros mestres, bom dia.<br>><br>> Uma breve introdução desse humilde aprendiz, e claro uma solicitação de
<br>> ajuda ou referência.<br>><br>> Onde trabalho sou um dos responsáveis pela área de TI e configuração de<br>> servidores WEB. Basicamente configuro e<br>> monitoro servicos WEB para que a aplicacao desenvolvida pela empresa rode
<br>> sem problemas. Porém recentemente<br>> começaram a desenvolver um modulo para apache ( desenvolveram em Kylix para<br>> versao 1.3.37 do Apache) que<br>> recebe as conexoes via http, processa a requisicao, abre conexao com oracle
<br>> e retorna o resultado para o cliente.<br>><br>><br>> O que acontece é que esse modulo esta abrindo mais conexoes com o banco do<br>> que devia, e os malditos<br>> desenvolvedores em delphi disseram que a culpa é do servico web.
<br>><br>> Já mostrei para o pessoal que o apache só gerencia as requisicoes com a<br>> porta na qual o processo "escuta" (80),<br>> e que as outras conexoes deveriam ser gerenciadas pelo modulo/driver que
<br>> eles utilizam. Fiz isso usando<br>> um modulo do CPAN "Apache::Scoreboard" (entao tive uma breve nocao do poder<br>> do perl)<br>><br>><br>> Bom, podem ficar tranquilos que não vim pedir ajuda em kylix ou em delphi,
<br>> meu intuito é elaborar um programa<br>> que faça o seguinte, pegue o PID do processo do apache, se esse PID não<br>> tiver simultaneamente conexoes abertas<br>> na porta 80 e 1521 (porta do banco), que gere uma lista.
<br>><br>><br>> Nao pretendo corrigir a falha do modulo do desenvolvimento, queria aprender<br>> como linguagens de<br>> programacao mais apropriadas lidam com isso, por isso peço uma referencia.<br>> Acho que
<br>> para corrigir isso o ideal seria que trocassem o pessoal do desenvolvimento<br>><br>><br>> Comprei o Learning Perl, mas ainda estou apanhando um pouco.<br>><br>> Se alguem poder dar uam dica para esse pequeno gafanhoto, agradeço.
<br>><br>> E desculpem pelo tamanho do e-mail<br>><br>><br>> Cristiano Torres<br>> _______________________________________________<br>> Cascavel-pm mailing list<br>> <a href="mailto:Cascavel-pm@pm.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
Cascavel-pm@pm.org</a><br>> <a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br>><br>
><br>_______________________________________________<br>Cascavel-pm mailing list
<br><a href="mailto:Cascavel-pm@pm.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">Cascavel-pm@pm.org</a><br><a href="http://mail.pm.org/mailman/listinfo/cascavel-pm" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br></blockquote></div><br>