Análise de
Performance Usando
o Sistema
Operacional
 DBA Multiplataforma
@rauldoliveira
raul.oliveira@dbytes.com.br
 Meetup Brasília DataGroup
http://www.meetup.com/pt-BR/Brasilia-DataGroup/
 SQLServerDF
http://groups.google.com/group/sqlserverdf
 MTAC
http://www.mtac.org.br
Raul Oliveira
Patrocinadores
Agenda
• Metodologia
• Ferramentas
• Contadores
• Análise superficial dos subsistemas
• + ferramentas 
• Considerações Finais
Objetivos
• Reflexão sobre performance a análise de performance
• Ferramentas
• Contadores
• Visão de um DBA, não de um sysadmin ;-)
• Pouca permissão 
Performance é subjetivo
Sistemas são complexos...
Crédito: Michel Frandsen, “High Performance
Insfrastructure for SQL Server”, PASS Summit 2014.
Sistemas são complexos...
Crédito: Michel Frandsen, “High Performance
Insfrastructure for SQL Server”, PASS Summit 2014.
Sistemas são complexos...
Crédito: Michel Frandsen, “High Performance
Insfrastructure for SQL Server”, PASS Summit 2014.
Terminologias
• Processo
• Thread
• Task
• Trap
• Handle ou File Descriptor
• Stack
Métodos
USE
• Utilização
• Saturação
• Erros
RTFM Method
Cuidado com os anti-métodos
Como analisar?
Crédito: Brendan Gregg
Observação – Básico
Linux
• uptime
• top
• ps
• vmstat
• mpstat
• free
Windows
• Task Manager
Observação Intermediário
Linux
• sar
• pidstat
• -g* (process name)
• -C “a|b”
• -l (comando)
• –t (thread)
• lsof
• netstat
• tcpdump
Windows
• resmon
• Perfmon
• Objects
• Counters
Observação Avançado
Linux
• slabtop
• strace
• ss
• iostat
• iotop
Windows - Sysinternals
• procexp
• handle
• procmon
• perfmon
Observação Avançado
Linux
• slabtop
• strace
• ss
• iostat
• iotop
Windows - Sysinternals
• procexp
• handle
• procmon
• perfmon
• Faça download em
https://download.sysinternals.com/files/SysinternalsS
uite.zip
• Extraia para um diretório: “C:Program
Files(x86)Sysint
• Adicione esse caminho à variável de sistema
%PATH%
• Instale Debugging Tools
• Adcione a variável de sistema
%_NT_SYMBOL_PATH% o valor:
“srv*c:symbols*http://msdl.microsoft.com/download/sym
bols”
Contadores
Recurso Tipo Métrica
CPU Utilização CPU Utilization
CPU Utilização Kernel Mode
CPU Saturação Run-queue
Memoria Utilização Memória Disponível
Memória Saturação Swap***
Storage Utilização Dispositivo Ocupado
Storage Saturação Wait Queue*****
Falando de CPU observe dois fatores:
• Frequência de operação
• Steal
Analisando Processador
Linux
• mpstat
• sar
• -P (sar 1)
• -P ALL (proc por linha)
• -u (sar 1)
• -u ALL (mpstat)
• -q (qeue)
• -m CPU (depende de parâmetro)
• -w (task creation)
• pidstat
• -R (Priority and schedulers)
• -s (Stack utilization)
• -u (CPU Utilization)
• -v** (Some Kernel Tables)
• -w (task switching activities)
Windows
• resmon
• procexp
Analisando Memória
Linux
• free –m
• vmstat
• sar
• –B (paging statistics)
• –H (Huge pages,3)
• -R (report mem statistics,3)
• -r (mem utilization statistics)
• -s (Swap Space utilization)
• -W (Swap Statistics)
• pidstat
• -r (Page Faults and Mem Utiliz.)
• -s (Stack utilization)
Windows
• resmon
• perfmon
• procexp
Analisando IO - Disco
Linux
• sar
• -b (IO e Transf rate)
• -B (de novo  )
• -d (ativ. block device)
• -F** (statitics mount FSs)
• iostat
• -d (disk)
• -h (human)
• -m (megabytes | -k)
• -x (extended)
• -N (Device Mapper-LVM)
• pidstat
• -d (IO Statistics)
• -r (de novo tbm  )
• iotop
Windows
• resmon
• perfmon
Analisando IO - Rede
Linux
• sar
• -n
• netstat
• -putona
• ss
Windows
• resmon
• perfmon
Análise histórica
Linux
• sar –s hh:mm:ss –e
hh:mm:ss
• -f (input de arquivo)
• -o (output para arquivo)
Windows
• Permon com coleta
Independente da plataforma,
use histórico e se possível,
gráficos!
Análises podem ser mais profundas...
Análises podem ser mais profundas...
Profiling e Tracing
• Profiling
• Tracing
Profiling e Tracing
Linux
• perf
• systemtrap
• Dtrace
• ...
Windows
• WPT
• WPR
• WPA
Facilitadores
• Ksar
• Flame Graphs
• PSSDiag
• PAL
Resumo
• Planejar os contadores para olhar é importante
• Saiba onde olhar
• Deixar as anotações básicas prontas
• Guarde histórico de casos já ocorridos
• Já deixe os softwares de monitoramento já instalados e ativos e
saiba como usá-los
Patrocinadores
CONTATOS:
@rauldoliveira
raul.oliveira@dbytes.com.br
 Meetup Brasília DataGroup
http://www.meetup.com/pt-BR/Brasilia-DataGroup/
 SQLServerDF
http://groups.google.com/group/sqlserverdf
 MTAC
http://www.mtac.org.br
Muito Obrigado!

Analise de Performance Usando o SO

Notas do Editor

  • #2 -VM Linux ligada -VM Windows ligada -Dois terminais no Linux -Procexp -Procmon -Resmon
  • #6 O que mais me ajudou a encontrar coisas na produção
  • #7 Aqui contar a história do cara que foi ao banheiro.
  • #11 Processo: abstração e ambiente para rodar um programa. “guarda chuva”. Rodam em user mode solicitando acesso ao kernel mode. Thread (segmento):contexto executável que pode ser agendado para CPU. Task: Entidade executável (processo [thread], thread de multithread, kernel thread) Trap (armadilha): sinal enviado ao kernel solicitgando uma rotina de sistema (syscal, proc exception, interrupt) Stack: Ascendencia de execução de uma thread
  • #14 Top: z – colorir y – tasks ativas f – Selecionar campos para mostrar (e então pressionar b) <>, F ou O para ordenar os campos. c – mostrar o comando Full H – Ver thread individualmente W – para salvar as configurações.
  • #16 Top: z – colorir y – tasks ativas f – Selecionar campos para mostrar (e então pressionar b) <>, F ou O para ordenar os campos. c – mostrar o comando Full H – Ver thread individualmente W – para salvar as configurações. ps -eo pid,tid,user,pcpu,pmem,comm free -tm
  • #17 pidstat 1 -p $(pgrep bzip2) dd if=/dev/zero of=/tmp/arquivo.bin bs=4k count=250000 #1GB
  • #18 Tracing – Todos os eventos (rastreamento)
  • #19 Tracing – Todos os eventos (rastreamento)
  • #20 IOPS no Windows: Disk Transfers/s
  • #22 echo 3 > /proc/sys/vm/drop_caches Vmstat : R = Run Queue, B = Blocked waiting IO
  • #23 await = average wait time em ms
  • #26 Objetivo é mostrar que ainda algumas análises podem mostrar qual pedaço da thread está com maiores esperas/consumos, pois observação é apenas um apanhado geral.
  • #27 Objetivo é mostrar que ainda algumas análises podem mostrar qual pedaço da thread está com maiores esperas/consumos, pois observação é apenas um apanhado geral.
  • #29 Profiling – Amostragens (perfil) Tracing – Todos os eventos (rastreamento)
  • #30 probe-(sonda, teste) while :; do date >> foo; done   perf stat -e 'ext4:*' -a stat = statistica -e = event 'ext4:*' = probe (sonda) Pode ser obtido com: perf list ext4*   perf stat -e 'ext4:*' -a sleep 5   perf record -F 99 -a -g -- sleep 5   while :; do date > /dev/null; done & dd if=/dev/urandom of=/dev/null bs=16k &         perf report -n --stdio   perf script > out.perf02   cat out.perf02 | ./stackcollapse-perf.pl | ./flamegraph.pl > out.svg   perf record -F 99 -ag -p 4665 -- sleep 5 perf trace ls |& less   perf help trace   /proc/sys/kernel/perf_event_paranoid: 2 = user space 1 = kernel and user (default) 0 = CPU specifica mas não permite tracepoint de dado cru -1 = no restriction   perf top -e cycles perf top -e cycles:p1 (cpu 1)   perf mem record stress -m 10 perf mem report   perf lock record ping -f 127.0.0.1 perf lock report | & less -S