Eu usei strace para observar o processo de serviço em execução algumas vezes e parece que não há muito impacto no processo tracee. Mas hoje quando usei o ltrace para fazer algum rastreamento, ele travou o processo de tracee, felizmente está em um ambiente de desenvolvimento. O dmesg mostra o seguinte erro:
[Fri Aug 2 11:02:43 2024] traps: writer1[4137194] trap int3 ip:4092c1 sp:7f1eda53db58 error:0 in service_prog[400000+1ea000]
Então eu tenho estas perguntas:
- O desempenho tem
perf/strace/ltrace
impacto no processo de rastreamento? - É seguro usar perf/strace/ltrace em um ambiente de produção?
- Por que o ltrace travou o processo tracee? Como interpretar a mensagem dmesg acima? o que é armadilha int3?
Obrigado.
Sim, todas as ferramentas de criação de perfil de desempenho adicionam sobrecarga. No entanto, a desaceleração e a maturidade das ferramentas variam enormemente. Aprenda as ferramentas em um host de teste. Talvez use-os na produção.
strace pode ter uma sobrecarga incrivelmente alta. Vale a pena repetir o argumento de Gregg sobre isso:
Essencialmente, ele atinge um ponto de interrupção do depurador a cada chamada do sistema. Na pior das hipóteses, quando um aplicativo tem muito syscall, ele pode ser executado centenas de vezes mais lento. Pelo que me lembro, ltrace também é baseado em ptrace() e tem sobrecarga semelhante.
Tanto strace quanto ltrace são ferramentas simples e maduras, os programas provavelmente estão disponíveis e você não precisará escrever código. No entanto, eu não começaria com nenhum dos dois ao investigar um problema de desempenho, especialmente na produção.
As ferramentas de desempenho são muito específicas da plataforma. No Linux, minha progressão do monitoramento para a criação de perfil é mais ou menos assim, dependendo de quais ferramentas estão disponíveis:
Observe que muitos deles estão usando perf_events, uma interface Linux mais recente para criar perfis de dados que é muito mais eficiente no limite do kernel do usuário.
Não sei exatamente o que essa mensagem de log significa. Se estiver relacionado ao sinal, falando em ferramentas bcc, considere usar o programa killsnoop para ver qual processo enviou o sinal.