Strace (system call and signals tracer)

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

%name Strace (system call and signals tracer)

Autor: Rafael Stoever

soma online overnight 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 http___www.bigleaguekickball.com_about_ Soma free consultation a banco de dados – DBA pela Lumina Serviços em TI residente de Blumenau/ SC, OPN Certified Specialist, Certificado OCP 10g/11g/12c, OCE RAC10g e Linux 10g. Conhecimentos em Microsoft SqlSever, Mysql e programação web (php,asp).