Olá Marco, obrigado pela resposta.<br><br>Eu até que consegui fazer &quot;mal e porcamente&quot; um script em shell, usando output de comandos<br>que conhecia &quot;ps, netstat, etc&quot; , 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 &quot;load avarage&quot; 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 é&nbsp; 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&#39;Andrade
</b> &lt;<a href="mailto:mdacwb@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">mdacwb@gmail.com</a>&gt; 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>&nbsp;&nbsp;PID TTY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TIME CMD<br> 9011 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:04:12 httpd<br>21582 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:02:00 httpd<br>11717 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:00:34 httpd<br> 1381 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:01:30 httpd<br> 8005 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00:02:15 httpd
<br>
<br><br>lsof -p &lt;pid&gt;<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&nbsp;&nbsp; 13581&nbsp;&nbsp;web&nbsp;&nbsp;&nbsp;&nbsp;6u&nbsp;&nbsp;IPv4 631869262&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCP
<br>200.x.y.z:59927-&gt;200.x.y.b:mysql (ESTABLISHED)<br>httpd&nbsp;&nbsp; 13581&nbsp;&nbsp;web&nbsp;&nbsp; 20u&nbsp;&nbsp;IPv4 525847182&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCP *:https (LISTEN)<br>httpd&nbsp;&nbsp; 13581&nbsp;&nbsp;web&nbsp;&nbsp; 21u&nbsp;&nbsp;IPv4 525847183&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;unless ( open(PS, &quot;ps -C httpd |&quot;) ) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot;Falha ao abrir PS: $!\n&quot;;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit 1;<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;while ( defined( $_ = &lt;PS&gt; ) ) {<br>&nbsp;&nbsp;&nbsp;&nbsp; ( $pid ) = /^\s+(\d+)\s+/;<br>&nbsp;&nbsp;&nbsp;&nbsp; next unless ( $pid );<br><br>&nbsp;&nbsp;&nbsp;&nbsp; unless ( open(LSOF, &quot;lsof -p $pid | grep TCP&quot;) ) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print &quot;Falha ao verificar open files para $pid: $!\n&quot;;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; next;<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; $http=0; $mysql=0;<br>&nbsp;&nbsp;&nbsp;&nbsp; while ( defined( $_ = &lt;LSOF&gt; ) ) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( /:http/ ) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$http=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} elsif ( /:mysql/ ) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mysql=1;
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; unless ( $mysql &amp;&amp; $http ) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push(@pids, $pid);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$full++;<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;if ( @pids ) {<br>&nbsp;&nbsp;&nbsp;&nbsp; printf &quot;Foram identificados %s processos sem acesso simultaneo e
<br>%s em ambos.\n&quot;,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scalar(@pids), $full;<br>&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp; printf &quot;Foram identificados apenas %s processos, sem acesso a<br>banco!\n&quot;, $full;<br>&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;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> &gt;&gt; Lista todas as conexões de rede, isola somente os ips desejados,
<br>conexões ativas tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 200.x:59701&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;200.y:3306<br>&nbsp;&nbsp; ESTABLISHED<br>tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 200.x:59471&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;200.y:3306&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED<br>tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 200.x:59459&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;200.y:3306&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED
<br>tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 200.x:59530&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;200.y:3306&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED<br>tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 200.x:59574&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;200.y:3306&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED<br>tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 200.x:59614&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;200.y:3306&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED<br>

tcp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 200.x:60223&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;200.y:3306&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ESTABLISHED<br><br>root@webmail1(click21):~# fuser -n tcp 59701<br>&nbsp;&nbsp;&gt;&gt; Verifica qual processo está utlizando a porta TCP localmente<br>59701/tcp:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13709
<br><br>root@webmail1(click21):~# ps -p 13709<br> &gt;&gt; responde QUAL é o processo<br>&nbsp;&nbsp;PID TTY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TIME CMD<br>13709 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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 &lt;<a href="mailto:listas.perl@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">listas.perl@gmail.com</a>
&gt;:<br>&gt; Caros mestres, bom dia.<br>&gt;<br>&gt; Uma breve introdução desse humilde aprendiz, e claro uma solicitação de
<br>&gt; ajuda ou referência.<br>&gt;<br>&gt; Onde trabalho sou um dos responsáveis pela área de TI e configuração de<br>&gt; servidores WEB. Basicamente configuro e<br>&gt; monitoro servicos WEB para que a aplicacao desenvolvida pela empresa rode
<br>&gt; sem problemas. Porém recentemente<br>&gt; começaram a desenvolver um modulo para apache ( desenvolveram em Kylix para<br>&gt; versao 1.3.37 do Apache) que<br>&gt; recebe as conexoes via http, processa a requisicao, abre conexao com oracle
<br>&gt; e retorna o resultado para o cliente.<br>&gt;<br>&gt;<br>&gt; O que acontece é que esse modulo esta abrindo mais conexoes com o banco do<br>&gt; que devia, e os malditos<br>&gt; desenvolvedores em delphi disseram que a culpa é do servico web.
<br>&gt;<br>&gt; Já mostrei para o pessoal que o apache só gerencia as requisicoes com a<br>&gt; porta na qual o processo &quot;escuta&quot; (80),<br>&gt; e que as outras conexoes deveriam ser gerenciadas pelo modulo/driver que
<br>&gt; eles utilizam. Fiz isso usando<br>&gt; um modulo do CPAN &quot;Apache::Scoreboard&quot; (entao tive uma breve nocao do poder<br>&gt; do perl)<br>&gt;<br>&gt;<br>&gt; Bom, podem ficar tranquilos que não vim pedir ajuda em kylix ou em delphi,
<br>&gt; meu intuito é elaborar um programa<br>&gt; que faça o seguinte, pegue o PID do processo do apache, se esse PID não<br>&gt; tiver simultaneamente conexoes abertas<br>&gt; na porta 80 e 1521 (porta do banco), que gere uma lista.
<br>&gt;<br>&gt;<br>&gt; Nao pretendo corrigir a falha do modulo do desenvolvimento, queria aprender<br>&gt; como linguagens de<br>&gt; programacao mais apropriadas lidam com isso, por isso peço uma referencia.<br>&gt; Acho que
<br>&gt; para corrigir isso o ideal seria que trocassem o pessoal do desenvolvimento<br>&gt;<br>&gt;<br>&gt; Comprei o Learning Perl, mas ainda estou apanhando um pouco.<br>&gt;<br>&gt; Se alguem poder dar uam dica para esse pequeno gafanhoto, agradeço.
<br>&gt;<br>&gt; E desculpem pelo tamanho do e-mail<br>&gt;<br>&gt;<br>&gt; Cristiano Torres<br>&gt; _______________________________________________<br>&gt; Cascavel-pm mailing list<br>&gt; <a href="mailto:Cascavel-pm@pm.org" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">

Cascavel-pm@pm.org</a><br>&gt; <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>&gt;<br>
&gt;<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>