Strace (system call and signals tracer)

Postado em Setembro 6th, 2011 sobre Erros,Linux por Rafael Stoever

Este artigo é dirigido aos administradores de sistema experientes e nos demonstra como desvendar os motivos que causam erros numa aplicação em ambientes linux.

Utilizando a ferramenta strace (system call and signals tracer) é possível interceptar e gravar as ‘system calls’ geradas por um processo e os sinais recebidos pelo mesmo, explicitando seus argumentos e os valores retornados.

Com ela você também pode aprender sobre o funcionamento de programas examinando a fronteira entre o usuário e o kernel através da análise das system calls e signals (altamente avançado).

E claro, nós como DBA’s podemos encontrar a soluções de problemas que são complexos para identicar porem com o strace identificar por exemplo o motivo que o oracleasm SCANDISKS não encontra seus discos é muito simples.

strace -f /etc/init.d/oracleasm scansdisks

6575  rt_sigprocmask(SIG_BLOCK, NULL, [], 8 ) = 0
6575  rt_sigprocmask(SIG_BLOCK, NULL, [], 8 ) = 0
6575  stat("/etc/sysconfig/oracleasm-_dev_oracleasm", {st_mode=S_IFREG|0644, st_size=791, ...}) = 0
6575  stat("/etc/sysconfig/oracleasm", {st_mode=S_IFREG|0644, st_size=854, ...}) = 0
6575  rt_sigprocmask(SIG_SETMASK, [], NULL, 8 ) = 0
6575  rt_sigprocmask(SIG_BLOCK, NULL, [], 8 ) = 0
6575  rt_sigprocmask(SIG_BLOCK, NULL, [], 8 ) = 0
6575  rt_sigprocmask(SIG_BLOCK, NULL, [], 8 ) = 0
6575  stat("/etc/sysconfig/oracleasm-_dev_oracleasm", {st_mode=S_IFREG|0644, st_size=791, ...}) = 0
6575  rt_sigprocmask(SIG_SETMASK, [], NULL, 8 ) = 0
6575  stat("/etc/sysconfig/oracleasm-_dev_oracleasm", {st_mode=S_IFREG|0644, st_size=791, ...}) = 0
6575  access("/etc/sysconfig/oracleasm-_dev_oracleasm", X_OK) = -1 EACCES ( Permission denied )
6575  access("/etc/sysconfig/oracleasm-_dev_oracleasm", R_OK) = 0
6575  open("/etc/sysconfig/oracleasm-_dev_oracleasm", O_RDONLY) = 4
6575  fstat(4, {st_mode=S_IFREG|0644, st_size=791, ...}) = 0
6575  read(4, "#\n# This is a configuration file"..., 791) = 791</pre>

Onde encontro o meu problema é simplesmente permissão negada. Ou então ao criar um disk:

# strace -f /etc/init.d/oracleasm createdisk VOL1 /dev/sdc1
...
19543 open("/dev/sdc1", O_RDWR|O_EXCL) = -1 EBUSY ( Device or resource busy )
...
19543 write(2, "Unable to open device \"/dev/sdc1"..., 59 >unfinished ...<
...
19527 write(1, "FAILED", 6) = 6

Causa do problema acima: O device em questão (/dev/sdc1) já esta montado como um diretorio do OS, assim ele informa recurso ocupado.

# mount | grep sdc1
/dev/sdc1 on /mnt type ext3 (rw)

Solução: Desmontar a unidade /dev/sdc1 e ai tentar criar o disk do oracleasm. Além de inúmeras utilidades para que possamos analisar com maiores detalhes e abrir um chamado mais direcionado na oracle support e ter um retorno mais rápido e eficiente.

Ref.: Strace man

Administering ASM Disk Groups

Sobre Rafael Stoever

Bacharel em Sistema de Informação pela Uniasselvi, atualmente cursando Gerenciamento de Projetos em TI pela Pós Graduação Uniasselvi. Atuo como Analista de suporte a banco de dados – DBA pela Teiko Soluções em TI residente de Blumenau/ SC, OPN Certified Specialist, Certificado OCP 10g/11g, OCE RAC10g e Linux 10g. Conhecimentos em Microsoft SqlSever e Mysql e programação web (php,asp).

Tags: , , , , , , , , ,

Uma Resposta para 'Strace (system call and signals tracer)'

Deixe um comentario




XHTML::
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>