Coluna do Alexandre COLUNA Dtrace Uma breve apresentação do Dtrace, com alguns exemplos do que ele permite fazer com facilidade. S olucionar problemas (o famoso troubleshooting) em sistemas operacionais é sempre um dos serviços mais importantes e difíceis praticados hoje em dia por todos os administradores. Talvez mais complexo do que isso é a atividade de localizar gargalos de desempenho no sistema. Não importa se isso ocorre no Linux, no FreeBSD, no OpenSolaris ou qualquer outro sistema, pois em todos eles isso será muito complicado. No caso do OpenSolaris, o sistema possui as ferramentas básicas para localização de problemas de desempenho (vmstat, sar, iostat, mpstat, truss etc.), entretanto, estas apenas apontam, quando bem utilizadas, para a região causadora dos transtornos (CPU, memória ou I/O), mas não trazem o que realmente os administradores precisam saber: quais processos estão causando o problema? É aí que entra o Dtrace. Não tenho qualquer intenção de ensinar Dtrace nesta coluna (até porque um dos artigos de OpenSolaris que ainda vou escrever é sobre esse assunto), porém, muitos me perguntam o que é o Dtrace. Simples: um conjunto enorme de sensores (chamados de probes pela Sun e cujo número ultrapassa facilmente os 40.000) espalhados pelo kernel do OpenSolaris e que registram qualquer ocorrência no sistema operacional. Para aprender Dtrace, é necessário saber um pouco como funciona o sistema operacional por dentro e ainda ter noções mínimas da linguagem utilizada para escrever seus scripts, a linguagem D. É claro que é muito mais interessante testar o Dtrace para saber um pouco melhor como ele funciona. Em vez de ensinar aqui a fazer scripts, segue uma pequena lista de scripts de apenas uma linha prontos para usar: Listar novos processos com seus respectivos argumentos: dtrace -n ‘proc:::exec-success { trace(curpsinfo ->pr_psargs); }’ Q uais são os arquivos abertos pelos processos: 18 dtrace -n ‘syscall::open*:entry { printf(“%s %s”,execname,copyinstr(arg0)); }’ N úmero de chamadas de sistema (system calls) realizadas por cada programa: dtrace -n ‘syscall:::entry { @num[execname] = count(); }’ N úmero de chamadas de sistema (system calls) realizadas por cada processo: dtrace -n ‘syscall:::entry { @nt by process,num[pid,execname] = count(); }’ N úmero de bytes lidos por cada processo: dtrace -n ‘sysinfo:::readch { @bytes[execname] = sum(arg0); }’ Quantidade de i/o transferida do disco ou para o disco em cada processo: dtrace -n ‘io:::start { printf(“%d %s %d”,pid,execname,args[0]->b_bcount); }’ N úmero de interrupções da CPU: dtrace -n ‘sdt:::interrupt-start { @num[cpu] = count(); }’ É importante perceber que estes são scripts extremamente simples que ilustram de forma muito básica o poder que o Dtrace oferece aos administradores de sistemas OpenSolaris. Se você ainda quiser, existem projetos do Dtrace que o implementam em Linux, FreeBSD e Apple Mac OS X. Agora é só sentar e começar a estudar. n Alexandre Borges é Especialista Sênior em Solaris, OpenSolaris e Linux. Trabalha com desenvolvimento, segurança, administração e performance desses sistemas operacionais, atuando como instrutor e consultor. É pesquisador de novas tecnologias e assuntos relacionados ao kernel. http://www.linuxmagazine.com.br