Ruby: memória e GC
O coletor de lixo do Ruby é geracional, e este curso explica o que ele decide e por quê. Ele trata de coletas menores e maiores, da promoção depois de três sobrevivências, da barreira de escrita e do conjunto lembrado. Mostra como descobrir o que dispara uma coleta maior com o GC.latest_gc_info, incluindo o caminho oldmalloc, e como reduzir o GC.stat a três razões. Separa vazamento de inchaço, mede o GC.compact e o copy-on-write em workers com fork e compara mudanças de alocação e de ajuste com os padrões.
O que você vai aprender
- ✓Como funcionam a coleta geracional, a promoção e a barreira de escrita
- ✓Descobrir a causa de uma coleta maior com o GC.latest_gc_info
- ✓Ler o GC.stat como razões de ocupação, fatia de coletas maiores e rotatividade
- ✓Distinguir um vazamento de memória de um inchaço
- ✓Quando o GC.compact ajuda e como o copy-on-write se desgasta em workers com fork
- ✓Medir alocações e decidir se vale mexer nas configurações do GC
A pausa que você não agendou
O seu p50 é 40 ms. O seu p99 é 900 ms. As requisições lentas não são queries mais lentas, nem outro endpoint, nem um cliente problemático. Elas estão espalhadas por tudo, e quando você as alinha com o tempo de vida do processo, elas chegam num ritmo. Alguma coisa no processo para o mundo a cada…
Ler a aula completa grátis →Currículo
7 aulasA pausa que você não agendou
Coletas maiores explicam os picos na latência de cauda e custaram cerca de quatro vezes uma coleta menor.
Coleta geracional e a write barrier
Promoção após três sobrevivências, coletas menores que pulam objetos velhos e a barreira de escrita que torna isso seguro.
O que dispara um GC major
Como o major_by e os pares de contador e limite do GC.stat mostram o que dispara uma coleta maior.
Lendo o GC.stat como diagnóstico
Reduzir o GC.stat a três razões (ocupação, fatia de coletas maiores e rotatividade), comparando diferenças entre duas amostras.
Bloat contra leak
Distinguir vazamento de inchaço medindo heap_live_slots em trabalho repetido, e como a fragmentação prende páginas do heap.
Compactação, fragmentação e copy-on-write
O que o GC.compact recupera, por que o auto_compact vem desligado e como workers com fork perdem páginas compartilhadas.
Alocação, tuning e quando parar
Quais mudanças de alocação compensam, como literais de string congelados, e os dois motivos medidos para mexer no GC.