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

Autor: 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 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).
One thought on “Strace (system call and signals tracer)”