SlideShare una empresa de Scribd logo
1 de 64
Descargar para leer sin conexión
Tres historias
(de verano)
Madrid DevOps 2016/09/27 @ae_bm
Advertencia
No son historias épicas
Puedo ofender con mis comentarios subjetivos
y sesgados
Espero que tenga una duración razonable
About me
Fan del trolleo (a veces en exceso)
Me agota el uso de etiquetas fancy en la
industria
A veces me llaman Mr. Wolf
Twitter → @ae_bm (cuidado!)
You know my name (no es tan difícil)
Tres historias
JVM on Elm Street
Erase una vez un sistema critico para los
clientes que “va mal” …
JVM on Elm Street
Cola de procesos en estado running 6
Proceso java 100% CPU y 50% Mem
Máquina virtual con 1 CPU y 1GB RAM + 2 GB
swap
SIGTERM al java (un supervisor lo inicia)
¿Estaba a tope la memoria la JVM o haciendo
GC o quién sabe?
JVM on Elm Street
JVM configurado para usar 64M-512M
¿Qué hilos estaban pendientes de ejecución?
No hay rastros del desastre A.K.A OOM Killer
Ahora está funcionando
JVM on Elm Street
Una semana después ...
JVM on Elm Street
Ahora no arranca la JVM
¿Qué herramientas puedo usar aquí?
JVM on Elm Street
JVM on Elm Street
JVM on Elm Street
JVM on Elm Street
Algunos eventos importantes en 2013
- Año de la quinua según la FAO
- Año de la serpiente
- Año de la Fe
- Renuncia Benedicto XVI
- Muerte de Paul Walker
- Nacimiento del Príncipe Jorge de Cambridge
- Cumplí años (business as usual, por ahora )
- Etc
JVM on Elm Street
JVM on Elm Street
Intentando ejecutarlo en foreground muestra un
out of memory exception
Hay recursos en la máquina anfitrión
Power up a 4GB RAM y 4 CPUS
JVM hasta 1024M (2X)
JVM on Elm Street
Sigue sin servir y con 100% uso de CPU
Con ps ­eLo comm podre ver el nombre de
los threads de la JVM
Todos se llaman Java
¿Por que la JVM no registra los nombres de los
threads?
java version "1.6.0_16"
JVM on Elm Street
JVM on Elm Street
Después de un largo rato usando 100% de
CPU aparece el mágico Out of memory
Creo que el GC desesperado tratando de hacer
espacio
Subir el uso de memoria de la JVM a 2048M
JVM on Elm Street
Ya funciona
¿Qué paso para necesitar un crecimiento de
4X en recursos?
¿Continuara ...?
Tres historias
La gráfica queso suizo
Hay varios huecos en una gráfica de cacti ...
La gráfica queso suizo
Otra maravillosa integración con un sistema
legacy
Perdón por no incluir la gráfica
Hay logs que se quejan de un timeout de snmp
Cacti consulta una OID a snmpd
snmpd delega la gestión de la OID a un script
python
La gráfica queso suizo
Usando sysdig
- Cuesta filtrar por el contenido de los buffers
de red – Gracias ASN.1 (BER, DER, etc)
- Buscando en los buffers del script se ven los
dos tipos de mensajes que le envía snmpd
- No parecen problemas de permisos
La gráfica queso suizo
Usando sysdig
- Lee el mismo fichero de configuración más
de 1000 veces
- Lee otro fichero varias veces
La gráfica queso suizo
Edito el script y con un log estratégico para
saber cuanto tarda (si, son segundos)
La gráfica queso suizo
Por el poder de las estadísticas
La gráfica queso suizo
El mínimo es de risa 18s
El Máximo es para morir - 33 min
Que el percentil 58 sean 30s. Es decir el 42%
de las ejecuciones tardaron más de 30 seg
La gráfica queso suizo
Contemplarlo nuevamente
La gráfica queso suizo
Durante las ejecuciones el script usaba 100%
CPU en modo usuario
¿Usar Flame graphs? NOPE
Python 2.7.3 y no puedo instalar cosas
Después de varias sesiones de PDB y muchos
prints en funciones
La gráfica queso suizo
En la función del MAL
- Hay un while que procesa cada entrada de un
fichero
- Cada iteración se hace en mucho menos de
1s, pero acumulando, terminamos en 16 seg
promedio
- Ya sumando pasamos los 20 seg
La gráfica queso suizo
En la función del MAL
- El creador del código ya intuía que esta
función era lenta, así que tenia un cache con
un TTL de 20s
- Pero al crecer la cantidad de datos a
procesar...
La gráfica queso suizo
Solución (temporal) aumentar el TTL del cache
a 300s
Por lo menos se redujo la variabilidad en el
tiempo de ejecución
Ese mismo día me dicen que deje de dedicarle
a esto, que al final van a cambiar todo este
sistema legacy
La gráfica queso suizo
Como me sentí ese día
Tres historias
Toysql y el delete bloqueante
Erase una BD (critica) con una tabla (MyISAM)
con millones de registros innecesarios ...
Toysql y el delete bloqueante
Es un problema sencillo
Sólo hay que hacer n veces
DELETE FROM table WHERE date < d LIMIT r
Si r es muy pequeño, habrá que repetir muchas veces
Si r es muy grande, se bloquean los inserts durante
mucho tiempo (Muy malo)
Bonus: La carga del sistema es variable
Toysql y el delete bloqueante
El plan
- Probar con una bd dummy
- Probar con un dump de la bd
- Pensar estrategias para elegir el valor de r
Toysql y el delete bloqueante
Con la bd dummy
r time (seconds)
1 0.00
10 0.00
100 0.02
1000 0.01
10000 0.05
100000 0.53
1000000 5.23
10000000 50.37
100000000 636.98
Toysql y el delete bloqueante
No tiene pinta de tener un crecimiento lineal
¿Será exponencial?
Haciendo un semi-log plot (no sabia que se
llamaba así)
Toysql y el delete bloqueante
Con la bd dummy (semi-log plot)
r ln(time)
1 
10 
100 -3.9120
1000 -4.6052
10000 -2.9957
100000 -0.6349
1000000 1.6544
10000000 3.9194
100000000 6.4567
Toysql y el delete bloqueante
Ya esto es más digerible
Luce como una recta
Parece que existe una relación exponencial el
numero de rows y el tiempo que tarda en
eliminarlas
Ahora toca ver como se comporta con datos de
verdad
Toysql y el delete bloqueante
Con la bd y datos reales
r time (seconds)
100 0.04
1000 0.05
10000 0.51
100000 4.44
1000000 38.41
Toysql y el delete bloqueante
Con la bd y datos reales (semi-log plot)
r time (seconds)
100 -3.2189
1000 -2.9957
10000 -0.6733
100000 1.4907
1000000 3.6483
Toysql y el delete bloqueante
Por si quereis entender lo que hace el semi-log
plot
Toysql y el delete bloqueante
Toysql y el delete bloqueante
Ya con una idea de como parece que se
comporta, vienen a la cabeza varias estrategias
(naive)
- Hacer un programa que vaya iterando haciendo
la query incrementando o decrementando en un
factor k el número de rows hasta llegar a la
latencia deseada
- Hemos pasado el problema de r a elegir el valor
de los incrementos k
Toysql y el delete bloqueante
Otra estrategia
- Usar el método de la bisectriz para hallar el
valor de r
- El problema es elegir el valor máximo de r a
intentar que no bloquee mucho la bd
- Recordar que la carga varia en el tiempo
Toysql y el delete bloqueante
Método de la bisectriz
Toysql y el delete bloqueante
Empezando la exquisitez
- En un momento llegue a pensar en ver si
podía apañar algo con el método de Newton–
Raphson
- No uso drogas BTW, pero tampoco estoy
contra su uso
Toysql y el delete bloqueante
No preguntéis
- Al final en un momento de extraño, decidí
darle vueltas al modelo a ver que sacaba
- Si, no revise la wikipedia
- Ya no recuerdo mucho como hice todo esto,
culpo a las vacaciones en Bulgaria y al rakia
Toysql y el delete bloqueante
#math #instamath #log #exp #secuence
Toysql y el delete bloqueante
Toysql y el delete bloqueante
Toysql y el delete bloqueante
Toysql y el delete bloqueante
Si, es un poco ...
Toysql y el delete bloqueante
Ya no pongo más matemática
Toysql y el delete bloqueante
Traduciendo del griego a español
- Con al menos dos ejecuciones de la query
con valores distintos de r
- Puedo calcular un valor para rows r + m que
estará justo en la latencia objetivo o por debajo
Toysql y el delete bloqueante
Llevando esto a un programa (fancy)
- Empezamos con r = 1
- Ya con al menos 2 iteraciones (con r distintos) se
calcula el valor de m para tener un r + m
- Repetir esto hasta borrar todo lo que hay que
borrar, en cuyo caso hacemos r = 1 hasta que se
acumulen registros suficientes para usar el algoritmo
de nuevo
Toysql y el delete bloqueante
Comparando el algoritmo naive y el fancy
250ms y sleep de 3s
Naive Iter Fancy iter % Iters
536 353 65.86
537 353 65.74
534 355 66.48
537 352 65.55
533 354 66.42
Naive Máx r Fancy Máx r
4540 5013
4630 4386
4550 4852
4520 8799
4590 4766
Toysql y el delete bloqueante
Comparando el algoritmo naive y el fancy
250ms y sleep de 3s
Naive fail r Fancy fail r Naive fail lat Fancy fail lat
4220 4826 0.49 0.6
3400 4238 0.64 1.02
780 4508 0.53 0.67
1790 4813 0.55 0.66
600 4636 0.87 0.58
Toysql y el delete bloqueante
Comparando el algoritmo naive y el fancy
250ms y sleep de 3s
Naive fails Fancy fails Naive fail % Fancy fail %
40 114 7.46 32.29
36 105 6.70 29.75
40 85 7.49 23.94
42 107 7.82 30.40
36 98 6.75 27.68
Toysql y el delete bloqueante
¿Cual debería utilizar?
Pendiente de ponerse en el sistema crítico de
algún afortunado ^_^
Tres historias
¿Preguntas? O ...

Más contenido relacionado

La actualidad más candente

Actividad integradora obligatoria nº 1 liliana e. lugo
Actividad integradora obligatoria nº 1 liliana e. lugoActividad integradora obligatoria nº 1 liliana e. lugo
Actividad integradora obligatoria nº 1 liliana e. lugoLiliana Lugo
 
Python científico (introducción a numpy y matplotlib))
Python científico (introducción a numpy y matplotlib))Python científico (introducción a numpy y matplotlib))
Python científico (introducción a numpy y matplotlib))kikocorreoso
 
Analisis de Algoritmos Multihilo
Analisis de Algoritmos MultihiloAnalisis de Algoritmos Multihilo
Analisis de Algoritmos MultihiloXavier Ochoa
 
Introducción a Google Go
Introducción a Google GoIntroducción a Google Go
Introducción a Google GoScalia
 

La actualidad más candente (7)

Actividad integradora obligatoria nº 1 liliana e. lugo
Actividad integradora obligatoria nº 1 liliana e. lugoActividad integradora obligatoria nº 1 liliana e. lugo
Actividad integradora obligatoria nº 1 liliana e. lugo
 
Yrina
YrinaYrina
Yrina
 
Taller nro 24
Taller nro 24Taller nro 24
Taller nro 24
 
Itrace lab
Itrace labItrace lab
Itrace lab
 
Python científico (introducción a numpy y matplotlib))
Python científico (introducción a numpy y matplotlib))Python científico (introducción a numpy y matplotlib))
Python científico (introducción a numpy y matplotlib))
 
Analisis de Algoritmos Multihilo
Analisis de Algoritmos MultihiloAnalisis de Algoritmos Multihilo
Analisis de Algoritmos Multihilo
 
Introducción a Google Go
Introducción a Google GoIntroducción a Google Go
Introducción a Google Go
 

Similar a Tres historias

Similar a Tres historias (20)

Teoria de la compleijidad algoritmica.pdf
Teoria de la compleijidad algoritmica.pdfTeoria de la compleijidad algoritmica.pdf
Teoria de la compleijidad algoritmica.pdf
 
Análisis de algoritmo
Análisis de algoritmoAnálisis de algoritmo
Análisis de algoritmo
 
08 compalgoritmos
08 compalgoritmos08 compalgoritmos
08 compalgoritmos
 
_Algoritmos.ppt
_Algoritmos.ppt_Algoritmos.ppt
_Algoritmos.ppt
 
Itcr el 3310 i semestre 2008 soluciones
Itcr el 3310  i semestre 2008 solucionesItcr el 3310  i semestre 2008 soluciones
Itcr el 3310 i semestre 2008 soluciones
 
Ricardo - Meetup Python Madrid marzo 2023.pptx
Ricardo - Meetup Python Madrid marzo 2023.pptxRicardo - Meetup Python Madrid marzo 2023.pptx
Ricardo - Meetup Python Madrid marzo 2023.pptx
 
Hx c19
Hx c19Hx c19
Hx c19
 
Complejidad
ComplejidadComplejidad
Complejidad
 
Tema1 faa 16_17
Tema1 faa 16_17Tema1 faa 16_17
Tema1 faa 16_17
 
Matlab
MatlabMatlab
Matlab
 
Matlab (1)
Matlab (1)Matlab (1)
Matlab (1)
 
Deep Learning, Python, C# y Azure
Deep Learning, Python, C# y AzureDeep Learning, Python, C# y Azure
Deep Learning, Python, C# y Azure
 
Hx c27
Hx c27Hx c27
Hx c27
 
Manual algoritmos y_estructura_de_datos
Manual algoritmos y_estructura_de_datosManual algoritmos y_estructura_de_datos
Manual algoritmos y_estructura_de_datos
 
Organización y Arquitectura de Computadores ESPOL Tercera Evaluación 2012-2
Organización y Arquitectura de Computadores ESPOL Tercera Evaluación 2012-2Organización y Arquitectura de Computadores ESPOL Tercera Evaluación 2012-2
Organización y Arquitectura de Computadores ESPOL Tercera Evaluación 2012-2
 
Unidad V Tutorial de Python
Unidad V Tutorial de PythonUnidad V Tutorial de Python
Unidad V Tutorial de Python
 
Sincronizacion Procesos
Sincronizacion ProcesosSincronizacion Procesos
Sincronizacion Procesos
 
News40 Parallel Computing
News40 Parallel ComputingNews40 Parallel Computing
News40 Parallel Computing
 
Cola
ColaCola
Cola
 
Semana 10 -_managing_processes_guia_de_ejercicios_resuelta
Semana 10 -_managing_processes_guia_de_ejercicios_resueltaSemana 10 -_managing_processes_guia_de_ejercicios_resuelta
Semana 10 -_managing_processes_guia_de_ejercicios_resuelta
 

Más de Alejandro E Brito Monedero (14)

Mad scalability (perfomance debugging)
Mad scalability (perfomance debugging)Mad scalability (perfomance debugging)
Mad scalability (perfomance debugging)
 
AMQP vs GRAPHITE
AMQP vs GRAPHITEAMQP vs GRAPHITE
AMQP vs GRAPHITE
 
Sysdig
SysdigSysdig
Sysdig
 
Sysdig SRECon 16 Europe
Sysdig SRECon 16 EuropeSysdig SRECon 16 Europe
Sysdig SRECon 16 Europe
 
Funcional para trollear
Funcional para trollearFuncional para trollear
Funcional para trollear
 
Top Bug
Top BugTop Bug
Top Bug
 
Fabric más allá de lo básico
Fabric más allá de lo básicoFabric más allá de lo básico
Fabric más allá de lo básico
 
Experiencias con PostgreSQL en AWS
Experiencias con PostgreSQL en AWSExperiencias con PostgreSQL en AWS
Experiencias con PostgreSQL en AWS
 
Fabric Fast & Furious edition
Fabric Fast & Furious editionFabric Fast & Furious edition
Fabric Fast & Furious edition
 
Así que pusiste MongoDB. Dime ¿cómo lo administras?
Así que pusiste MongoDB. Dime ¿cómo lo administras?Así que pusiste MongoDB. Dime ¿cómo lo administras?
Así que pusiste MongoDB. Dime ¿cómo lo administras?
 
AWS Baby steps circa 2008
AWS Baby steps circa 2008AWS Baby steps circa 2008
AWS Baby steps circa 2008
 
Using Logstash, elasticsearch & kibana
Using Logstash, elasticsearch & kibanaUsing Logstash, elasticsearch & kibana
Using Logstash, elasticsearch & kibana
 
Wireshark tips
Wireshark tipsWireshark tips
Wireshark tips
 
Mi experiencia con Amazon AWS EC2 y S3
Mi experiencia con Amazon AWS EC2 y S3Mi experiencia con Amazon AWS EC2 y S3
Mi experiencia con Amazon AWS EC2 y S3
 

Último

Los mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfLos mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfodalistar77
 
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfPresentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfymiranda2
 
Matriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxMatriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxPaolaCarolinaCarvaja
 
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...OLGAMILENAMONTAEZNIO
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETGermán Küber
 
La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....Aaron Betancourt
 
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosEl diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosLCristinaForchue
 
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfTENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfJoseAlejandroPerezBa
 
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOSPRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOSLincangoKevin
 
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...RaymondCode
 
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfInmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfOBr.global
 
Análisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdfAnálisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdfcastrodanna185
 
Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.marianarodriguezc797
 
Carta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdfCarta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdfangelinebocanegra1
 
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfActividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfalejandrogomezescoto
 
La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2montoyagabriela340
 
VIDEOS DE APOYO.docx E
VIDEOS DE APOYO.docx                                  EVIDEOS DE APOYO.docx                                  E
VIDEOS DE APOYO.docx Emialexsolar
 
Inteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidadInteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidaddanik1023m
 

Último (20)

Los mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfLos mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdf
 
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfPresentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
 
Matriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxMatriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docx
 
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
 
La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....La Electricidad y La Electrónica.pdf....
La Electricidad y La Electrónica.pdf....
 
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimosEl diseño de Algoritmos Paralelos.pdf - analisis de algortimos
El diseño de Algoritmos Paralelos.pdf - analisis de algortimos
 
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfTENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
 
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOSPRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
 
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
 
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdfInmersión global en ciberseguridad e IA en la conferencia RSA.pdf
Inmersión global en ciberseguridad e IA en la conferencia RSA.pdf
 
BEDEC Proyecto y obra , novedades 2024 - Xavier Folch
BEDEC Proyecto y obra , novedades 2024 - Xavier FolchBEDEC Proyecto y obra , novedades 2024 - Xavier Folch
BEDEC Proyecto y obra , novedades 2024 - Xavier Folch
 
Análisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdfAnálisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdf
 
Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.
 
BEDEC Sostenibilidad, novedades 2024 - Laura Silva
BEDEC Sostenibilidad, novedades 2024 - Laura SilvaBEDEC Sostenibilidad, novedades 2024 - Laura Silva
BEDEC Sostenibilidad, novedades 2024 - Laura Silva
 
Carta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdfCarta de Premio y Excel angeline 11-2pdf
Carta de Premio y Excel angeline 11-2pdf
 
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfActividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
 
La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2La tablet trabajo en grupo del grado 9-2
La tablet trabajo en grupo del grado 9-2
 
VIDEOS DE APOYO.docx E
VIDEOS DE APOYO.docx                                  EVIDEOS DE APOYO.docx                                  E
VIDEOS DE APOYO.docx E
 
Inteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidadInteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidad
 

Tres historias

  • 1. Tres historias (de verano) Madrid DevOps 2016/09/27 @ae_bm
  • 2. Advertencia No son historias épicas Puedo ofender con mis comentarios subjetivos y sesgados Espero que tenga una duración razonable
  • 3. About me Fan del trolleo (a veces en exceso) Me agota el uso de etiquetas fancy en la industria A veces me llaman Mr. Wolf Twitter → @ae_bm (cuidado!) You know my name (no es tan difícil)
  • 5. JVM on Elm Street Erase una vez un sistema critico para los clientes que “va mal” …
  • 6. JVM on Elm Street Cola de procesos en estado running 6 Proceso java 100% CPU y 50% Mem Máquina virtual con 1 CPU y 1GB RAM + 2 GB swap SIGTERM al java (un supervisor lo inicia) ¿Estaba a tope la memoria la JVM o haciendo GC o quién sabe?
  • 7. JVM on Elm Street JVM configurado para usar 64M-512M ¿Qué hilos estaban pendientes de ejecución? No hay rastros del desastre A.K.A OOM Killer Ahora está funcionando
  • 8. JVM on Elm Street Una semana después ...
  • 9. JVM on Elm Street Ahora no arranca la JVM ¿Qué herramientas puedo usar aquí?
  • 10. JVM on Elm Street
  • 11. JVM on Elm Street
  • 12. JVM on Elm Street
  • 13. JVM on Elm Street Algunos eventos importantes en 2013 - Año de la quinua según la FAO - Año de la serpiente - Año de la Fe - Renuncia Benedicto XVI - Muerte de Paul Walker - Nacimiento del Príncipe Jorge de Cambridge - Cumplí años (business as usual, por ahora ) - Etc
  • 14. JVM on Elm Street
  • 15. JVM on Elm Street Intentando ejecutarlo en foreground muestra un out of memory exception Hay recursos en la máquina anfitrión Power up a 4GB RAM y 4 CPUS JVM hasta 1024M (2X)
  • 16. JVM on Elm Street Sigue sin servir y con 100% uso de CPU Con ps ­eLo comm podre ver el nombre de los threads de la JVM Todos se llaman Java ¿Por que la JVM no registra los nombres de los threads? java version "1.6.0_16"
  • 17. JVM on Elm Street
  • 18. JVM on Elm Street Después de un largo rato usando 100% de CPU aparece el mágico Out of memory Creo que el GC desesperado tratando de hacer espacio Subir el uso de memoria de la JVM a 2048M
  • 19. JVM on Elm Street Ya funciona ¿Qué paso para necesitar un crecimiento de 4X en recursos? ¿Continuara ...?
  • 21. La gráfica queso suizo Hay varios huecos en una gráfica de cacti ...
  • 22. La gráfica queso suizo Otra maravillosa integración con un sistema legacy Perdón por no incluir la gráfica Hay logs que se quejan de un timeout de snmp Cacti consulta una OID a snmpd snmpd delega la gestión de la OID a un script python
  • 23. La gráfica queso suizo Usando sysdig - Cuesta filtrar por el contenido de los buffers de red – Gracias ASN.1 (BER, DER, etc) - Buscando en los buffers del script se ven los dos tipos de mensajes que le envía snmpd - No parecen problemas de permisos
  • 24. La gráfica queso suizo Usando sysdig - Lee el mismo fichero de configuración más de 1000 veces - Lee otro fichero varias veces
  • 25. La gráfica queso suizo Edito el script y con un log estratégico para saber cuanto tarda (si, son segundos)
  • 26. La gráfica queso suizo Por el poder de las estadísticas
  • 27. La gráfica queso suizo El mínimo es de risa 18s El Máximo es para morir - 33 min Que el percentil 58 sean 30s. Es decir el 42% de las ejecuciones tardaron más de 30 seg
  • 28. La gráfica queso suizo Contemplarlo nuevamente
  • 29. La gráfica queso suizo Durante las ejecuciones el script usaba 100% CPU en modo usuario ¿Usar Flame graphs? NOPE Python 2.7.3 y no puedo instalar cosas Después de varias sesiones de PDB y muchos prints en funciones
  • 30. La gráfica queso suizo En la función del MAL - Hay un while que procesa cada entrada de un fichero - Cada iteración se hace en mucho menos de 1s, pero acumulando, terminamos en 16 seg promedio - Ya sumando pasamos los 20 seg
  • 31. La gráfica queso suizo En la función del MAL - El creador del código ya intuía que esta función era lenta, así que tenia un cache con un TTL de 20s - Pero al crecer la cantidad de datos a procesar...
  • 32. La gráfica queso suizo Solución (temporal) aumentar el TTL del cache a 300s Por lo menos se redujo la variabilidad en el tiempo de ejecución Ese mismo día me dicen que deje de dedicarle a esto, que al final van a cambiar todo este sistema legacy
  • 33. La gráfica queso suizo Como me sentí ese día
  • 35. Toysql y el delete bloqueante Erase una BD (critica) con una tabla (MyISAM) con millones de registros innecesarios ...
  • 36. Toysql y el delete bloqueante Es un problema sencillo Sólo hay que hacer n veces DELETE FROM table WHERE date < d LIMIT r Si r es muy pequeño, habrá que repetir muchas veces Si r es muy grande, se bloquean los inserts durante mucho tiempo (Muy malo) Bonus: La carga del sistema es variable
  • 37. Toysql y el delete bloqueante El plan - Probar con una bd dummy - Probar con un dump de la bd - Pensar estrategias para elegir el valor de r
  • 38. Toysql y el delete bloqueante Con la bd dummy r time (seconds) 1 0.00 10 0.00 100 0.02 1000 0.01 10000 0.05 100000 0.53 1000000 5.23 10000000 50.37 100000000 636.98
  • 39. Toysql y el delete bloqueante No tiene pinta de tener un crecimiento lineal ¿Será exponencial? Haciendo un semi-log plot (no sabia que se llamaba así)
  • 40. Toysql y el delete bloqueante Con la bd dummy (semi-log plot) r ln(time) 1  10  100 -3.9120 1000 -4.6052 10000 -2.9957 100000 -0.6349 1000000 1.6544 10000000 3.9194 100000000 6.4567
  • 41. Toysql y el delete bloqueante Ya esto es más digerible Luce como una recta Parece que existe una relación exponencial el numero de rows y el tiempo que tarda en eliminarlas Ahora toca ver como se comporta con datos de verdad
  • 42. Toysql y el delete bloqueante Con la bd y datos reales r time (seconds) 100 0.04 1000 0.05 10000 0.51 100000 4.44 1000000 38.41
  • 43. Toysql y el delete bloqueante Con la bd y datos reales (semi-log plot) r time (seconds) 100 -3.2189 1000 -2.9957 10000 -0.6733 100000 1.4907 1000000 3.6483
  • 44. Toysql y el delete bloqueante Por si quereis entender lo que hace el semi-log plot
  • 45. Toysql y el delete bloqueante
  • 46. Toysql y el delete bloqueante Ya con una idea de como parece que se comporta, vienen a la cabeza varias estrategias (naive) - Hacer un programa que vaya iterando haciendo la query incrementando o decrementando en un factor k el número de rows hasta llegar a la latencia deseada - Hemos pasado el problema de r a elegir el valor de los incrementos k
  • 47. Toysql y el delete bloqueante Otra estrategia - Usar el método de la bisectriz para hallar el valor de r - El problema es elegir el valor máximo de r a intentar que no bloquee mucho la bd - Recordar que la carga varia en el tiempo
  • 48. Toysql y el delete bloqueante Método de la bisectriz
  • 49. Toysql y el delete bloqueante Empezando la exquisitez - En un momento llegue a pensar en ver si podía apañar algo con el método de Newton– Raphson - No uso drogas BTW, pero tampoco estoy contra su uso
  • 50. Toysql y el delete bloqueante No preguntéis - Al final en un momento de extraño, decidí darle vueltas al modelo a ver que sacaba - Si, no revise la wikipedia - Ya no recuerdo mucho como hice todo esto, culpo a las vacaciones en Bulgaria y al rakia
  • 51. Toysql y el delete bloqueante #math #instamath #log #exp #secuence
  • 52. Toysql y el delete bloqueante
  • 53. Toysql y el delete bloqueante
  • 54. Toysql y el delete bloqueante
  • 55. Toysql y el delete bloqueante Si, es un poco ...
  • 56. Toysql y el delete bloqueante Ya no pongo más matemática
  • 57. Toysql y el delete bloqueante Traduciendo del griego a español - Con al menos dos ejecuciones de la query con valores distintos de r - Puedo calcular un valor para rows r + m que estará justo en la latencia objetivo o por debajo
  • 58. Toysql y el delete bloqueante Llevando esto a un programa (fancy) - Empezamos con r = 1 - Ya con al menos 2 iteraciones (con r distintos) se calcula el valor de m para tener un r + m - Repetir esto hasta borrar todo lo que hay que borrar, en cuyo caso hacemos r = 1 hasta que se acumulen registros suficientes para usar el algoritmo de nuevo
  • 59. Toysql y el delete bloqueante Comparando el algoritmo naive y el fancy 250ms y sleep de 3s Naive Iter Fancy iter % Iters 536 353 65.86 537 353 65.74 534 355 66.48 537 352 65.55 533 354 66.42 Naive Máx r Fancy Máx r 4540 5013 4630 4386 4550 4852 4520 8799 4590 4766
  • 60. Toysql y el delete bloqueante Comparando el algoritmo naive y el fancy 250ms y sleep de 3s Naive fail r Fancy fail r Naive fail lat Fancy fail lat 4220 4826 0.49 0.6 3400 4238 0.64 1.02 780 4508 0.53 0.67 1790 4813 0.55 0.66 600 4636 0.87 0.58
  • 61. Toysql y el delete bloqueante Comparando el algoritmo naive y el fancy 250ms y sleep de 3s Naive fails Fancy fails Naive fail % Fancy fail % 40 114 7.46 32.29 36 105 6.70 29.75 40 85 7.49 23.94 42 107 7.82 30.40 36 98 6.75 27.68
  • 62. Toysql y el delete bloqueante ¿Cual debería utilizar? Pendiente de ponerse en el sistema crítico de algún afortunado ^_^