{"id":20682,"date":"2026-08-15T18:19:23","date_gmt":"2026-08-15T16:19:23","guid":{"rendered":"https:\/\/webhosting.de\/bcc-tools-linux-performance-ebpf-observability-focus\/"},"modified":"2026-08-15T18:19:23","modified_gmt":"2026-08-15T16:19:23","slug":"bcc-ferramentas-linux-desempenho-ebpf-observabilidade-foco","status":"publish","type":"post","link":"https:\/\/webhosting.de\/pt\/bcc-tools-linux-performance-ebpf-observability-focus\/","title":{"rendered":"bcc tools em a\u00e7\u00e3o: guia pr\u00e1tico para a engenharia de desempenho em Linux com eBPF"},"content":{"rendered":"<p>Vou mostrar, passo a passo, como eu <strong>ferramentas bcc<\/strong> utilizo o eBPF para identificar e resolver rapidamente os pontos de estrangulamento nos servidores Linux. Para tal, recorro a fluxos de trabalho pr\u00e1ticos, me\u00e7o as lat\u00eancias reais no kernel e relaciono eventos da CPU, das E\/S e da rede para formar uma <strong>claro<\/strong> An\u00e1lise das causas.<\/p>\n\n<h2>Pontos centrais<\/h2>\n<ul>\n  <li><strong>eBPF<\/strong> proporciona um rastreio aprofundado com uma sobrecarga reduzida.<\/li>\n  <li><strong>ferramentas bcc<\/strong> abrangem a CPU, as E\/S, a rede e os processos.<\/li>\n  <li><strong>Pr\u00f3ximo da produ\u00e7\u00e3o<\/strong> Pode ser utilizado sem altera\u00e7\u00f5es na aplica\u00e7\u00e3o.<\/li>\n  <li><strong>Lista de controlo<\/strong> com dez ferramentas para come\u00e7ar.<\/li>\n  <li><strong>Seguran\u00e7a<\/strong> atrav\u00e9s do Verifier e de pol\u00edticas claras.<\/li>\n<\/ul>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-performance-ebpf-4976.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Por que raz\u00e3o o eBPF \u00e9 importante para a engenharia de desempenho do Linux<\/h2>\n<p>Eu pego no <strong>eBPF<\/strong>, porque pretendo medir os eventos do kernel de forma segura, seletiva e com muito pouca sobrecarga. As ferramentas cl\u00e1ssicas apresentam valores totais, mas raramente explicam por que raz\u00e3o os threads ficam em espera, os pacotes s\u00e3o reenviados ou a E\/S fica bloqueada; o eBPF preenche esta lacuna com <strong>concretos<\/strong> Eventos. Os programas s\u00e3o executados no kernel, o Verifier verifica-os previamente e posso inici\u00e1-los sem reiniciar o sistema. Desta forma, correlaciono as chamadas do espa\u00e7o do utilizador com os percursos do kernel e obtenho uma vis\u00e3o geral que permite otimiza\u00e7\u00f5es imediatas. Quem quiser aprofundar o tema encontrar\u00e1 uma vis\u00e3o geral na minha breve introdu\u00e7\u00e3o \u00e0 <a href=\"https:\/\/webhosting.de\/pt\/ebpf-analise-de-desempenho-linux-rastreamento-servidor-monitorizacao-observabilidade\/\">An\u00e1lise de desempenho do eBPF<\/a>, que descreve a intera\u00e7\u00e3o entre o rastreamento e a observabilidade.<\/p>\n\n<h2>O que s\u00e3o as ferramentas BCC e onde as posso encontrar?<\/h2>\n<p>O <strong>cco<\/strong> As ferramentas s\u00e3o programas de diagn\u00f3stico prontos a usar, baseados em eBPF, e encontram-se normalmente em \/usr\/share\/bcc\/tools. Executo-as diretamente no shell, obtenho sa\u00eddas padr\u00e3o claras e n\u00e3o preciso de alterar as minhas aplica\u00e7\u00f5es. A cole\u00e7\u00e3o abrange processos, chamadas de sistema, sistemas de ficheiros, E\/S em bloco, rede, agendador e an\u00e1lise de desempenho, sendo assim adequada para <strong>produtivo<\/strong> An\u00e1lises. Como ativo o rastreio de forma seletiva, o impacto \u00e9 reduzido e os erros de medi\u00e7\u00e3o decorrentes da monitoriza\u00e7\u00e3o s\u00e3o m\u00ednimos. Para casos mais complexos, complemento as ferramentas com o meu pr\u00f3prio eBPF ou utilizo adicionalmente perfis de amostragem.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/bcc_tools_linux_eBPF_7438.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Instala\u00e7\u00e3o e requisitos<\/h2>\n<p>Vou instalar o <strong>cco<\/strong> Ferramentas dispon\u00edveis atrav\u00e9s do gestor de pacotes (bcc-tools ou bpfcc-tools) nas distribui\u00e7\u00f5es mais comuns. S\u00e3o necess\u00e1rios um kernel com suporte a eBPF (a partir da vers\u00e3o 4.x, de prefer\u00eancia 4.9+), fun\u00e7\u00f5es BPF ativadas e direitos suficientes para carregar os programas. Em servidores de produ\u00e7\u00e3o, verifico previamente as capacidades eBPF do kernel e da distribui\u00e7\u00e3o num ambiente de teste, para que as medi\u00e7\u00f5es posteriores <strong>fi\u00e1vel<\/strong> funcionam. Evito perfis de seguran\u00e7a que bloqueiem completamente o eBPF atrav\u00e9s de pol\u00edticas adequadas. As instru\u00e7\u00f5es concisas sobre a configura\u00e7\u00e3o e a utiliza\u00e7\u00e3o fornecem uma vis\u00e3o geral pr\u00e1tica sobre <a href=\"https:\/\/webhosting.de\/pt\/ebpf-linux-ferramentas-de-analise-monitorizacao-de-servidores-insights\/\">Ferramentas de an\u00e1lise eBPF<\/a>.<\/p>\n\n<h2>Antes do arranque: verifica\u00e7\u00f5es do sistema e de seguran\u00e7a<\/h2>\n<p>Antes de efetuar medi\u00e7\u00f5es na produ\u00e7\u00e3o, verifico as capacidades b\u00e1sicas do anfitri\u00e3o. Desta forma, evito erros iniciais e obtenho resultados reproduz\u00edveis.<\/p>\n<ul>\n  <li>Verificar as funcionalidades do kernel: <code>uname -r<\/code> e fun\u00e7\u00f5es BPF dispon\u00edveis (por exemplo, atrav\u00e9s do Feature-Check). S\u00e3o importantes os kprobes\/tracepoints, o BTF (para informa\u00e7\u00f5es de tipo est\u00e1veis) e os eventos perf.<\/li>\n  <li>Direitos e pol\u00edticas: Asseguro-me de que apenas os utilizadores autorizados possam carregar o eBPF (CAP_BPF\/CAP_SYS_ADMIN ou pol\u00edtica equivalente) e de que os perfis LSM n\u00e3o bloqueiem o carregamento.<\/li>\n  <li>Par\u00e2metros do sistema: <code>kernel.unprivileged_bpf_disabled<\/code> est\u00e1 normalmente ativo em ambientes produtivos. Por isso, trabalho deliberadamente a partir de sess\u00f5es seguras e com um registo de auditoria claro.<\/li>\n  <li>Caminhos transparentes: Considero que diret\u00f3rios como <code>\/sys\/kernel\/debug\/tracing<\/code> e <code>\/sys\/fs\/bpf<\/code> em vista, para eliminar artefactos ap\u00f3s as medi\u00e7\u00f5es.<\/li>\n<\/ul>\n<p>Esta rigorosa higiene garante que eu realize medi\u00e7\u00f5es de forma precisa e reproduz\u00edvel \u2013 sem efeitos colaterais.<\/p>\n\n<h2>Guia pr\u00e1tico: As primeiras dez ferramentas<\/h2>\n<p>Para uma verifica\u00e7\u00e3o r\u00e1pida do desempenho, sigo uma sequ\u00eancia fixa. Desta forma, consigo identificar com clareza as causas relacionadas com a CPU, as E\/S ou a rede e decidir se devo analisar mais detalhadamente as pilhas ou os tempos de resposta. A tabela apresenta a fun\u00e7\u00e3o principal das ferramentas e a quest\u00e3o que procuro esclarecer com elas. Inicialmente, mantenho o tempo de execu\u00e7\u00e3o curto e repito as medi\u00e7\u00f5es assim que tenho uma suspeita <strong>confirmar<\/strong> quero. Assim, evito pontos cegos e n\u00e3o perco tempo em situa\u00e7\u00f5es urgentes <strong>Incidentes<\/strong>.<\/p>\n\n<table>\n  <thead>\n    <tr>\n      <th>Ferramenta<\/th>\n      <th>Observado<\/th>\n      <th>Pergunta t\u00edpica<\/th>\n    <\/tr>\n  <\/thead>\n  <tbody>\n    <tr>\n      <td>execsnoop<\/td>\n      <td>Novos processos<\/td>\n      <td>Quem cria empregos de curta dura\u00e7\u00e3o que geram encargos?<\/td>\n    <\/tr>\n    <tr>\n      <td>opensnoop<\/td>\n      <td>Abertura de ficheiros<\/td>\n      <td>Que caminhos s\u00e3o constantemente abertos ou registados?<\/td>\n    <\/tr>\n    <tr>\n      <td>ext4 mais lento (xfs*, btrfs*, zfs*)<\/td>\n      <td>Opera\u00e7\u00f5es FS lentas<\/td>\n      <td>Quais s\u00e3o as chamadas que apresentam lat\u00eancias elevadas por volume?<\/td>\n    <\/tr>\n    <tr>\n      <td>biolatic\u00eancia<\/td>\n      <td>Distribui\u00e7\u00e3o de E\/S em bloco<\/td>\n      <td>Existem picos de lat\u00eancia espor\u00e1dicos ou persistentes?<\/td>\n    <\/tr>\n    <tr>\n      <td>biosnoop<\/td>\n      <td>Pedidos de E\/S individuais<\/td>\n      <td>Que processo \u00e9 que deixa certos dispositivos fora de servi\u00e7o?<\/td>\n    <\/tr>\n    <tr>\n      <td>cachestat<\/td>\n      <td>Comportamento da cache de p\u00e1ginas<\/td>\n      <td>Vale a pena aumentar a mem\u00f3ria RAM ou a aplica\u00e7\u00e3o apresenta falhas?<\/td>\n    <\/tr>\n    <tr>\n      <td>tcpconnect<\/td>\n      <td>Novas liga\u00e7\u00f5es TCP<\/td>\n      <td>Quem recorre a que servi\u00e7o e com que frequ\u00eancia?<\/td>\n    <\/tr>\n    <tr>\n      <td>tcpaccept<\/td>\n      <td>Liga\u00e7\u00f5es aceites<\/td>\n      <td>Quais s\u00e3o os sockets do servidor que est\u00e3o sob carga elevada?<\/td>\n    <\/tr>\n    <tr>\n      <td>tcpretrans<\/td>\n      <td>Retransmiss\u00f5es<\/td>\n      <td>A perda de pacotes indica que os percursos s\u00e3o inst\u00e1veis?<\/td>\n    <\/tr>\n    <tr>\n      <td>runqlat<\/td>\n      <td>Lat\u00eancias do agendador<\/td>\n      <td>Os threads est\u00e3o a esperar demasiado tempo pelo tempo de CPU?<\/td>\n    <\/tr>\n  <\/tbody>\n<\/table>\n<p>Tamb\u00e9m utilizo <strong>perfis<\/strong> para detetar pontos cr\u00edticos no espa\u00e7o do utilizador ou do kernel e agregar pilhas de chamadas. Desta forma, identifico express\u00f5es regulares dispendiosas, controladores ineficientes ou spinlocks, que corrijo no c\u00f3digo ou na configura\u00e7\u00e3o. Utilizo intervalos de amostragem curtos e comparo v\u00e1rias execu\u00e7\u00f5es, para que os valores at\u00edpicos <strong>vis\u00edvel<\/strong> . Esta combina\u00e7\u00e3o de vis\u00e3o geral e aprofundamento poupa-me muito tempo de an\u00e1lise. Em seguida, testo novamente a otimiza\u00e7\u00e3o com a mesma carga.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/linux-performance-ebpf-tools-4528.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Extens\u00e3o: tornar vis\u00edveis as opera\u00e7\u00f5es fora da CPU, os bloqueios e os tempos de espera<\/h2>\n<p>Nem toda a lat\u00eancia elevada est\u00e1 relacionada com a CPU. Muitas vezes, os threads \u201efora da CPU\u201c ficam \u00e0 espera de opera\u00e7\u00f5es de E\/S, bloqueios ou ativa\u00e7\u00f5es. Nesses casos, as ferramentas e perfis bcc complementares podem ajudar:<\/p>\n<ul>\n  <li>An\u00e1lise fora da CPU: Mido durante quanto tempo os threads n\u00e3o est\u00e3o na CPU e quais as pilhas que conduzem at\u00e9 l\u00e1. Isto permite distinguir o tempo de c\u00e1lculo do tempo de espera e identifica os bloqueios.<\/li>\n  <li>Contend\u00eancia de bloqueios: analiso especificamente os bloqueios cr\u00edticos do kernel e do espa\u00e7o do utilizador. Tempos de espera prolongados ou elevados n\u00edveis de contend\u00eancia indicam pontos de serializa\u00e7\u00e3o que procuro eliminar (por exemplo, atrav\u00e9s de sharding, maior granularidade ou outras estruturas de dados).<\/li>\n  <li>Caminhos de ativa\u00e7\u00e3o: as lat\u00eancias entre \u201efoi ativado\u201c e \u201eest\u00e1 novamente em execu\u00e7\u00e3o\u201c revelam problemas de agendamento e de prioridade ou conjuntos de trabalhadores demasiado grandes.<\/li>\n<\/ul>\n<p>Estabele\u00e7o uma correla\u00e7\u00e3o entre estes sinais e <strong>runqlat<\/strong> e <strong>biolatic\u00eancia<\/strong>, para distinguir entre causas relacionadas com a mem\u00f3ria, com as E\/S e com o agendador.<\/p>\n\n<h2>Higiene das medi\u00e7\u00f5es: filtros, dura\u00e7\u00e3o, limiares<\/h2>\n<p>Para que as medi\u00e7\u00f5es eBPF continuem a ser reprodut\u00edveis, sigo tr\u00eas regras b\u00e1sicas:<\/p>\n<ul>\n  <li>De forma sucinta e direta: inicialmente, deixo as ferramentas a funcionar apenas por um curto per\u00edodo de tempo (por exemplo, 10 a 30 segundos) e concentro-me nos PIDs, contentores ou sockets suspeitos.<\/li>\n  <li>Definir limiares: Nas ferramentas \u201e*slower\u201c, filtro as pequenas lat\u00eancias para reduzir o ru\u00eddo e ver apenas as chamadas problem\u00e1ticas.<\/li>\n  <li>Limitar a taxa: Utilizo filtros seletivos (por exemplo, nome do processo, TIDs, portas) para manter baixas as taxas de eventos. Desta forma, a sobrecarga permanece m\u00ednima e evito a perda de eventos.<\/li>\n<\/ul>\n<p>S\u00f3 quando vejo um padr\u00e3o \u00e9 que prolongo o per\u00edodo de vig\u00eancia ou alargo o \u00e2mbito. Desta forma, consigo <strong>limpo<\/strong> e amostras fi\u00e1veis.<\/p>\n\n<h2>Cen\u00e1rio pr\u00e1tico 1: Carga da CPU inexplicavelmente elevada<\/h2>\n<p>Se o indicador da CPU apresentar valores elevados de forma constante, come\u00e7o por <strong>execsnoop<\/strong>, para detetar processos de curta dura\u00e7\u00e3o. Em seguida, utilizo o `runqlat` para medir quanto tempo os threads esperam pelo tempo de CPU e verifico se as filas de execu\u00e7\u00e3o est\u00e3o sobrecarregadas ou se as prioridades est\u00e3o mal definidas. Se os tempos de espera se tornarem evidentes, reduzo o n\u00famero de trabalhadores, alterei os conjuntos de threads ou distribuo as tarefas Cron de forma a que o agendador <strong>agarrar<\/strong> pode. Com o profile, recolho stacks e identifico os verdadeiros pontos cr\u00edticos nas bibliotecas e no meu pr\u00f3prio c\u00f3digo. S\u00f3 depois de reunir estas informa\u00e7\u00f5es \u00e9 que tomo decis\u00f5es sobre limites, recolha de lixo, afinidades ou op\u00e7\u00f5es do compilador.<\/p>\n\n<h2>Cen\u00e1rio pr\u00e1tico 2: Lat\u00eancias de E\/S e aplica\u00e7\u00f5es lentas<\/h2>\n<p>Se os utilizadores se queixarem de travamentos com baixa utiliza\u00e7\u00e3o da CPU, verifico com <strong>ext4 mais lento<\/strong> Chamadas lentas ao sistema de ficheiros por processo. Em seguida, utilizo o biolatency para analisar a distribui\u00e7\u00e3o dos tempos de E\/S de blocos por dispositivo, com o objetivo de identificar picos espor\u00e1dicos ou estrangulamentos persistentes. O `biosnoop` mostra-me se um \u00fanico servi\u00e7o est\u00e1 a gerar um n\u00famero excessivo de pequenas grava\u00e7\u00f5es, provocando assim um ac\u00famulo na fila que atrasa outros processos. Com o `cachestat`, verifico se o cache de p\u00e1ginas est\u00e1 a acertar ou se h\u00e1 falhas <strong>dominar<\/strong> e se mais RAM ajudaria. No final, sou eu que decido se as grava\u00e7\u00f5es em lote, os buffers maiores ou a mudan\u00e7a para um armazenamento mais r\u00e1pido valem a pena.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/tech_office_nachtarbeit_1234.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Cen\u00e1rio pr\u00e1tico 3: Caminhos de rede e microsservi\u00e7os<\/h2>\n<p>Em ambientes distribu\u00eddos, come\u00e7o por <strong>tcpconnect<\/strong>, para medir o estabelecimento de liga\u00e7\u00f5es entre servi\u00e7os. Depois, verifico com o `tcpaccept` quais s\u00e3o os sockets do servidor que recebem um n\u00famero particularmente elevado de entradas e se os limites do lado do listener est\u00e3o a ser aplicados. O `tcpretrans` deteta reenvios e distingue problemas de transporte de erros de aplica\u00e7\u00e3o, antes de ajustar os tempos de espera e as tentativas de reenvio. Com estes tr\u00eas indicadores, consigo perceber se a rede, a aplica\u00e7\u00e3o ou um servi\u00e7o a montante \u00e9 o respons\u00e1vel pela <strong>Lat\u00eancia<\/strong> executa. Em seguida, ajusto as estrat\u00e9gias de backoff, os valores de keepalive, as defini\u00e7\u00f5es do balanceador de carga e os tamanhos dos buffers.<\/p>\n\n<h2>Seguran\u00e7a operacional e fiabilidade do eBPF<\/h2>\n<p>S\u00f3 estou a carregar <strong>confi\u00e1vel<\/strong> Utilizo ferramentas e testo os meus pr\u00f3prios programas eBPF primeiro no ambiente de teste. O Kernel-Verifier bloqueia programas com erros, mas eu defino ainda limites adicionais para maps e buffers, para que a mem\u00f3ria permane\u00e7a devidamente limitada. Guardo os registos para acompanhar o comportamento e os efeitos secund\u00e1rios e para poder intervir rapidamente, se necess\u00e1rio. As pol\u00edticas definem quem pode carregar eBPF, para que o controlo permane\u00e7a com a equipa da plataforma e os requisitos de seguran\u00e7a sejam cumpridos. Estas regras garantem que o rastreio em ambientes de produ\u00e7\u00e3o <strong>Fi\u00e1vel<\/strong> mant\u00e9m-se e n\u00e3o traz surpresas.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/entwickler_schreibtisch_tools_4829.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Ambientes de contentores e Kubernetes<\/h2>\n<p>Nos contentores, separo os problemas sistem\u00e1ticos dos efeitos espec\u00edficos dos pods. Para isso, filtro as medi\u00e7\u00f5es por cgroup, namespace ou intervalo de PID. Muitas ferramentas bcc permitem filtrar por nome ou ID de processo; em alternativa, fa\u00e7o as medi\u00e7\u00f5es no anfitri\u00e3o e atribuo os eventos \u00e0s cargas de trabalho por meio do cgroup. Importante:<\/p>\n<ul>\n  <li>Espa\u00e7o de nomes PID: os PIDs diferem entre o anfitri\u00e3o e o contentor. Eu mapeio os IDs ou filtro por nomes de processos\/portas.<\/li>\n  <li>Quotas de recursos: a limita\u00e7\u00e3o da CPU atrav\u00e9s das quotas do CFS manifesta-se em longos tempos de espera, mesmo sem a utiliza\u00e7\u00e3o total do sistema. Percebo isso atrav\u00e9s de <strong>runqlat<\/strong> em combina\u00e7\u00e3o com m\u00e9tricas de quotas.<\/li>\n  <li>Espa\u00e7os de nomes de rede: Nas an\u00e1lises de sockets, presto aten\u00e7\u00e3o ao espa\u00e7o de nomes correto. Fa\u00e7o as medi\u00e7\u00f5es na interface do anfitri\u00e3o e estabele\u00e7o a correla\u00e7\u00e3o com os IPs e as portas dos pods.<\/li>\n<\/ul>\n<p>Desta forma, os resultados das medi\u00e7\u00f5es mant\u00eam a sua validade, mesmo quando muitas cargas de trabalho est\u00e3o a ser executadas em simult\u00e2neo.<\/p>\n\n<h2>Integra\u00e7\u00e3o em pilhas de observabilidade<\/h2>\n<p>N\u00e3o vou substituir o meu sistema de monitoriza\u00e7\u00e3o, vou complement\u00e1-lo com <strong>eBPF<\/strong>. As ferramentas da bcc proporcionam-me a profundidade, enquanto os sistemas de m\u00e9tricas, os registos e o APM mostram a amplitude; em conjunto, criam uma imagem coerente. Quando necess\u00e1rio, encaminho os tra\u00e7os da bcc para pipelines de registos, aciono instant\u00e2neos em caso de incidentes e documento as conclus\u00f5es com a equipa. Para perfis pontuais, utilizo a amostragem em complemento \u00e0s linhas temporais das m\u00e9tricas, para que as anomalias <strong>tang\u00edvel<\/strong> ser\u00e1. Quem preferir utilizar scripts como complemento, encontrar\u00e1 em <a href=\"https:\/\/webhosting.de\/pt\/bpftrace-detetar-mais-rapidamente-problemas-no-servidor-de-alojamento-e-realizar-o-diagnostico\/\">bpftrace no alojamento<\/a> uma forma simples de responder a perguntas pontuais com miniscripts.<\/p>\n\n<h2>Obst\u00e1culos frequentes \u2013 e como os contornar<\/h2>\n<ul>\n  <li>Vizinho ruidoso: tarefas individuais geram uma carga de curta dura\u00e7\u00e3o, mas intensa. <strong>execsnoop<\/strong> mais <strong>perfis<\/strong> Estes padr\u00f5es revelam-se de forma fi\u00e1vel; defino-lhes um intervalo de tempo ou isolo-os atrav\u00e9s de quotas.<\/li>\n  <li>NUMA e afinidades: as lat\u00eancias elevadas, apesar de haver n\u00facleos livres, indicam acessos entre NUMA. Estou a verificar as afinidades da CPU, a atribui\u00e7\u00e3o de mem\u00f3ria e a distribui\u00e7\u00e3o de IRQ.<\/li>\n  <li>Pontos cr\u00edticos de IRQ\/SoftIRQ: a carga da rede pode saturar os n\u00facleos ksoftirqd. Estou a monitorizar as retransmiss\u00f5es, a distribuir os IRQs atrav\u00e9s de RSS\/filas e a ajustar o RPS\/XPS.<\/li>\n  <li>Efeitos da cache de p\u00e1ginas: os arranques a frio parecem mais lentos. Tenho em conta as fases de aquecimento e comparo <strong>cachestat<\/strong>-Valores antes e depois da carga.<\/li>\n  <li>Atualiza\u00e7\u00f5es do kernel: os Kprobes podem sofrer altera\u00e7\u00f5es em saltos de vers\u00e3o. Prefiro pontos de rastreio est\u00e1veis, testo-os antecipadamente e mantenho um conjunto m\u00ednimo \u00e0 disposi\u00e7\u00e3o.<\/li>\n<\/ul>\n\n<h2>Processos de trabalho que deram bons resultados<\/h2>\n<ul>\n  <li>Instant\u00e2neo do incidente: execu\u00e7\u00e3o combinada de 60 a 120 segundos (execsnoop, runqlat, biolatency, tcpretrans, profile). Depois, concentro-me no subsistema que se destaca.<\/li>\n  <li>Rotina de refer\u00eancia: medi\u00e7\u00f5es breves semanais em percursos-chave (por exemplo, perfil de armazenamento e de rede). Desta forma, consigo detetar desvios numa fase precoce.<\/li>\n  <li>Valida\u00e7\u00e3o das altera\u00e7\u00f5es: Antes e depois das altera\u00e7\u00f5es de configura\u00e7\u00e3o, comparo os mesmos pontos de medi\u00e7\u00e3o para quantificar o efeito.<\/li>\n<\/ul>\n\n<h2>Engenharia cont\u00ednua do desempenho do Linux<\/h2>\n<p>Encaro a performance como um processo cont\u00ednuo, e n\u00e3o como <strong>A\u00e7\u00e3o pontual<\/strong>. No CI\/CD, integro verifica\u00e7\u00f5es curtas baseadas em eBPF para detetar regress\u00f5es numa fase inicial e impedi-las antes da implementa\u00e7\u00e3o. Durante as janelas de manuten\u00e7\u00e3o, avalio percursos t\u00edpicos sob carga, estabele\u00e7o valores de refer\u00eancia e documento intervalos de lat\u00eancia aceit\u00e1veis. Desta forma, deteto rapidamente desvios e evito ter de adivinhar durante a resolu\u00e7\u00e3o de incidentes, uma vez que dispongo de dados comparativos <strong>dispon\u00edvel<\/strong>. Esta rotina contribui diretamente para a disponibilidade, o controlo de custos e a experi\u00eancia do utilizador.<\/p>\n\n\n<figure class=\"wp-block-image size-full is-resized\">\n  <img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webhosting.de\/wp-content\/uploads\/2026\/08\/bcc-tools-leitfaden-4956.png\" alt=\"\" width=\"1536\" height=\"1024\"\/>\n<\/figure>\n\n\n<h2>Mini-estudo de caso: Do sintoma \u00e0 causa em 12 minutos<\/h2>\n<p>Um cluster de API est\u00e1 a registar um aumento nas lat\u00eancias de 99p, mantendo-se o RPS inalterado. Inicio um instant\u00e2neo do incidente: <strong>tcpconnect<\/strong> n\u00e3o apresenta anomalias no estabelecimento da liga\u00e7\u00e3o, <strong>tcpretrans<\/strong> mant\u00e9m-se baixo \u2013 mas a rede, ao que parece, n\u00e3o. <strong>runqlat<\/strong> indica tempos de espera curtos, mas frequentes; <strong>perfis<\/strong> mostra os pontos de acesso numa serializa\u00e7\u00e3o JSON. Paralelamente, observo com <strong>cachestat<\/strong> uma queda nas taxas de acertos da cache durante os picos. A correla\u00e7\u00e3o sugere: muitas cargas pequenas, que s\u00e3o serializadas de forma sincronizada e gravadas imediatamente.<\/p>\n<p>Verifico com <strong>ext4 mais lento<\/strong>, que mostra fsyncs com a dura\u00e7\u00e3o de v\u00e1rios milissegundos no mesmo volume para o processo da API; <strong>biolatic\u00eancia<\/strong> Confirma picos espor\u00e1dicos na fila no dispositivo afetado. Medida corretiva: agrupamento das grava\u00e7\u00f5es, buffer maior e esvaziamento ass\u00edncrono em pontos menos sens\u00edveis. Ap\u00f3s a implementa\u00e7\u00e3o, as lat\u00eancias de 99p diminuem em 35 %, a taxa de acertos na cache recupera-se e <strong>runqlat<\/strong> apresenta novamente distribui\u00e7\u00f5es estreitas.<\/p>\n\n<h2>Resumo para a pr\u00e1tica<\/h2>\n<p>Com <strong>cco<\/strong> Com as ferramentas e o eBPF, consigo obter rapidamente uma vis\u00e3o clara sobre a CPU, as E\/S e a rede, sem alterar as aplica\u00e7\u00f5es. A lista de verifica\u00e7\u00e3o composta por execsnoop, opensnoop, ext4slower, biolatency, biosnoop, cachestat, tcpconnect, tcpaccept, tcpretrans e runqlat constitui um ponto de partida coerente. Como complemento, utilizo o `profile` para identificar pontos cr\u00edticos e otimizar os percursos de c\u00f3digo. Atrav\u00e9s de pol\u00edticas, registos e limites bem definidos, a interven\u00e7\u00e3o no kernel mant\u00e9m-se <strong>seguro<\/strong> e compreens\u00edvel. Quem aplicar este m\u00e9todo de forma consistente resolve os problemas de desempenho mais rapidamente, planifica melhor as capacidades e reduz os custos por pedido.<\/p>","protected":false},"excerpt":{"rendered":"<p>Descubra como analisar e otimizar profissionalmente o desempenho do Linux com as ferramentas bcc e o eBPF. Este guia apresenta t\u00e9cnicas pr\u00e1ticas de engenharia de desempenho, com foco na palavra-chave \u00abbcc tools\u00bb.<\/p>","protected":false},"author":1,"featured_media":20675,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[922],"tags":[],"class_list":["post-20682","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technologie"],"acf":[],"_wp_attached_file":null,"_wp_attachment_metadata":null,"litespeed-optimize-size":null,"litespeed-optimize-set":null,"_elementor_source_image_hash":null,"_wp_attachment_image_alt":null,"stockpack_author_name":null,"stockpack_author_url":null,"stockpack_provider":null,"stockpack_image_url":null,"stockpack_license":null,"stockpack_license_url":null,"stockpack_modification":null,"color":null,"original_id":null,"original_url":null,"original_link":null,"unsplash_location":null,"unsplash_sponsor":null,"unsplash_exif":null,"unsplash_attachment_metadata":null,"_elementor_is_screenshot":null,"surfer_file_name":null,"surfer_file_original_url":null,"envato_tk_source_kit":null,"envato_tk_source_index":null,"envato_tk_manifest":null,"envato_tk_folder_name":null,"envato_tk_builder":null,"envato_elements_download_event":null,"_menu_item_type":null,"_menu_item_menu_item_parent":null,"_menu_item_object_id":null,"_menu_item_object":null,"_menu_item_target":null,"_menu_item_classes":null,"_menu_item_xfn":null,"_menu_item_url":null,"_trp_menu_languages":null,"rank_math_primary_category":null,"rank_math_title":null,"inline_featured_image":null,"_yoast_wpseo_primary_category":null,"rank_math_schema_blogposting":null,"rank_math_schema_videoobject":null,"_oembed_049c719bc4a9f89deaead66a7da9fddc":null,"_oembed_time_049c719bc4a9f89deaead66a7da9fddc":null,"_yoast_wpseo_focuskw":null,"_yoast_wpseo_linkdex":null,"_oembed_27e3473bf8bec795fbeb3a9d38489348":null,"_oembed_c3b0f6959478faf92a1f343d8f96b19e":null,"_trp_translated_slug_en_us":null,"_wp_desired_post_slug":null,"_yoast_wpseo_title":null,"tldname":null,"tldpreis":null,"tldrubrik":null,"tldpolicylink":null,"tldsize":null,"tldregistrierungsdauer":null,"tldtransfer":null,"tldwhoisprivacy":null,"tldregistrarchange":null,"tldregistrantchange":null,"tldwhoisupdate":null,"tldnameserverupdate":null,"tlddeletesofort":null,"tlddeleteexpire":null,"tldumlaute":null,"tldrestore":null,"tldsubcategory":null,"tldbildname":null,"tldbildurl":null,"tldclean":null,"tldcategory":null,"tldpolicy":null,"tldbesonderheiten":null,"tld_bedeutung":null,"_oembed_d167040d816d8f94c072940c8009f5f8":null,"_oembed_b0a0fa59ef14f8870da2c63f2027d064":null,"_oembed_4792fa4dfb2a8f09ab950a73b7f313ba":null,"_oembed_33ceb1fe54a8ab775d9410abf699878d":null,"_oembed_fd7014d14d919b45ec004937c0db9335":null,"_oembed_21a029d076783ec3e8042698c351bd7e":null,"_oembed_be5ea8a0c7b18e658f08cc571a909452":null,"_oembed_a9ca7a298b19f9b48ec5914e010294d2":null,"_oembed_f8db6b27d08a2bb1f920e7647808899a":null,"_oembed_168ebde5096e77d8a89326519af9e022":null,"_oembed_cdb76f1b345b42743edfe25481b6f98f":null,"_oembed_87b0613611ae54e86e8864265404b0a1":null,"_oembed_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_oembed_time_27aa0e5cf3f1bb4bc416a4641a5ac273":null,"_tldname":null,"_tldclean":null,"_tldpreis":null,"_tldcategory":null,"_tldsubcategory":null,"_tldpolicy":null,"_tldpolicylink":null,"_tldsize":null,"_tldregistrierungsdauer":null,"_tldtransfer":null,"_tldwhoisprivacy":null,"_tldregistrarchange":null,"_tldregistrantchange":null,"_tldwhoisupdate":null,"_tldnameserverupdate":null,"_tlddeletesofort":null,"_tlddeleteexpire":null,"_tldumlaute":null,"_tldrestore":null,"_tldbildname":null,"_tldbildurl":null,"_tld_bedeutung":null,"_tldbesonderheiten":null,"_oembed_ad96e4112edb9f8ffa35731d4098bc6b":null,"_oembed_8357e2b8a2575c74ed5978f262a10126":null,"_oembed_3d5fea5103dd0d22ec5d6a33eff7f863":null,"_eael_widget_elements":null,"_oembed_0d8a206f09633e3d62b95a15a4dd0487":null,"_oembed_time_0d8a206f09633e3d62b95a15a4dd0487":null,"_aioseo_description":null,"_eb_attr":null,"_eb_data_table":null,"_oembed_819a879e7da16dd629cfd15a97334c8a":null,"_oembed_time_819a879e7da16dd629cfd15a97334c8a":null,"_acf_changed":null,"_wpcode_auto_insert":null,"_edit_last":null,"_edit_lock":null,"_oembed_e7b913c6c84084ed9702cb4feb012ddd":null,"_oembed_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_time_bfde9e10f59a17b85fc8917fa7edf782":null,"_oembed_03514b67990db061d7c4672de26dc514":null,"_oembed_time_03514b67990db061d7c4672de26dc514":null,"rank_math_news_sitemap_robots":null,"rank_math_robots":null,"_eael_post_view_count":"129","_trp_automatically_translated_slug_ru_ru":null,"_trp_automatically_translated_slug_et":null,"_trp_automatically_translated_slug_lv":null,"_trp_automatically_translated_slug_fr_fr":null,"_trp_automatically_translated_slug_en_us":null,"_wp_old_slug":null,"_trp_automatically_translated_slug_da_dk":null,"_trp_automatically_translated_slug_pl_pl":null,"_trp_automatically_translated_slug_es_es":null,"_trp_automatically_translated_slug_hu_hu":null,"_trp_automatically_translated_slug_fi":null,"_trp_automatically_translated_slug_ja":null,"_trp_automatically_translated_slug_lt_lt":null,"_elementor_edit_mode":null,"_elementor_template_type":null,"_elementor_version":null,"_elementor_pro_version":null,"_wp_page_template":null,"_elementor_page_settings":null,"_elementor_data":null,"_elementor_css":null,"_elementor_conditions":null,"_happyaddons_elements_cache":null,"_oembed_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_time_75446120c39305f0da0ccd147f6de9cb":null,"_oembed_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_time_3efb2c3e76a18143e7207993a2a6939a":null,"_oembed_59808117857ddf57e478a31d79f76e4d":null,"_oembed_time_59808117857ddf57e478a31d79f76e4d":null,"_oembed_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_time_965c5b49aa8d22ce37dfb3bde0268600":null,"_oembed_81002f7ee3604f645db4ebcfd1912acf":null,"_oembed_time_81002f7ee3604f645db4ebcfd1912acf":null,"_elementor_screenshot":null,"_oembed_7ea3429961cf98fa85da9747683af827":null,"_oembed_time_7ea3429961cf98fa85da9747683af827":null,"_elementor_controls_usage":null,"_elementor_page_assets":[],"_elementor_screenshot_failed":null,"theplus_transient_widgets":null,"_eael_custom_js":null,"_wp_old_date":null,"_trp_automatically_translated_slug_it_it":null,"_trp_automatically_translated_slug_pt_pt":null,"_trp_automatically_translated_slug_zh_cn":null,"_trp_automatically_translated_slug_nl_nl":null,"_trp_automatically_translated_slug_pt_br":null,"_trp_automatically_translated_slug_sv_se":null,"rank_math_analytic_object_id":null,"rank_math_internal_links_processed":"1","_trp_automatically_translated_slug_ro_ro":null,"_trp_automatically_translated_slug_sk_sk":null,"_trp_automatically_translated_slug_bg_bg":null,"_trp_automatically_translated_slug_sl_si":null,"litespeed_vpi_list":null,"litespeed_vpi_list_mobile":null,"rank_math_seo_score":null,"rank_math_contentai_score":null,"ilj_limitincominglinks":null,"ilj_maxincominglinks":null,"ilj_limitoutgoinglinks":null,"ilj_maxoutgoinglinks":null,"ilj_limitlinksperparagraph":null,"ilj_linksperparagraph":null,"ilj_blacklistdefinition":null,"ilj_linkdefinition":null,"_eb_reusable_block_ids":null,"rank_math_focus_keyword":"bcc tools","rank_math_og_content_image":null,"_yoast_wpseo_metadesc":null,"_yoast_wpseo_content_score":null,"_yoast_wpseo_focuskeywords":null,"_yoast_wpseo_keywordsynonyms":null,"_yoast_wpseo_estimated-reading-time-minutes":null,"rank_math_description":null,"surfer_last_post_update":null,"surfer_last_post_update_direction":null,"surfer_keywords":null,"surfer_location":null,"surfer_draft_id":null,"surfer_permalink_hash":null,"surfer_scrape_ready":null,"_thumbnail_id":"20675","footnotes":null,"_links":{"self":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/20682","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/comments?post=20682"}],"version-history":[{"count":0,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/posts\/20682\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media\/20675"}],"wp:attachment":[{"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/media?parent=20682"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/categories?post=20682"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webhosting.de\/pt\/wp-json\/wp\/v2\/tags?post=20682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}