El módulo “tracemalloc”

Slides:



Advertisements
Presentaciones similares
Preparado por: José Enrique Cartagena Ortiz Diseñador Instruccional C_DATA.
Advertisements

María Fernanda González Aguilar 2°F. ¿Qué es una plataforma educativa virtual?  Una plataforma virtual, es un conjunto de aplicaciones informáticas de.
Migración de informes de Oracle Reports 6i a IReport en el Escritorio de Tramitación de la Consejería de Salud de la Junta de Andalucía Dpto. Informática.
Haga clic para modificar el estilo de subtítulo del patrón 4/11/10 Noviembre 4, 2010 Inicio de 1er Ciclo de Pruebas: CRP 1 - MODULARES.
Proyecto GNOME. Agenda ● Generalidades. ● Historia. ● Fundación GNOME. ● La industria alrededor de GNOME. ● Estado de GNOME. ● Lenguajes de GNOME. ● Estudios.
Diseño y Programación Orientados a Objetos1 Introducción a Java.
¿Que es PHP? PHP Hypertext Preprocessor Y solo porque me quiero hacer el profesor cool y meter un chiste: PHP también significa: Para Hacer Páginas.
Curso de Python Clase 5 Dpto. Telemática CUJAE Curso
PROGRAMACIÓN ORIENTADA A OBJETOS SEGUNDA UNIDAD: “CLASES, OBJETOS Y MÉTODOS” IRVING YAIR SALAS CHÁVEZ ING. EN SISTEMAS COMPUTACIONALES - ITSLP.
ARDUINO INTRODUCCIÓN Y PROGRAMACIÓN. Podemos tener Señales analógicas y digitales. INTRODUCCIÓN.
Es la forma en que se denomina a un extenso conjunto de herramientas que se diferencian de las aplicaciones tradicionales de Internet por estar enfocadas.
Diseño de aplicaciones móviles
Interconexión Registros Mercantiles UE
Diseño y Programación Orientados a Objetos
Proceso: Una instancia de un programa en ejecución
Paul Leger Repaso While y FOR Paul Leger
Operadores Java es un lenguaje rico en operadores, que son casi idénticos a los de C/C++.
Diseño y Programación Orientados a Objetos
PHP Hypertext Preprocessor
Diseño y Programación Orientados a Objetos
Ciclos condicionales y exactos Estructura de control de ciclos
LENGUAJE DE PROGRAMACIÓN Y SOFTWARE PROPIETARIO
ADMINISTRACíON DE LA MEMORIA EN SISTEMAS RECIENTES
Conceptos y definición básicos
Módulo 9 Automatización industrial Unidad 1 Introducción a los autómatas programables. Clase 03: Software de un Relé programable.. Nivel: IV medio Especialidad:
Miguel García Ruiz Jackeline Giraldo Urrea
Unidad 6. Capítulo IV. Puntos ordinarios y puntos singulares.
TIPO DE DATOS EN ACCESS 2010 TEXTO, MEMO, NUMERO, FECHA/HORA, MONEDA, AUTONUMERACION, SI/NO, OBJETO OLE, HIPERVINCULO, DATOS ADJUNTADOS, CALCULADO Y ASISTENTES.
Constantes y variables
Manejo de Punteros y objetos en memoria dinámica en C++
Prezi Prezi es un programa de presentaciones para explorar y compartir ideas sobre un documento virtual basado en la informática en nube (software como.
Memoria virtual.
Tipos de pruebas Hector Leonardo Arias.
SOFWARE EDUCATIVO YAKIRA VILLAMIZAR BIMBER INGRID ROBLEDO MORENO
Fundamentos de programación en TIG 4. Aptana y Arcpy
INTRODUCCIÓN A JAVA.
Diseño y Programación Orientados a Objetos
Manejo de Punteros y objetos en memoria dinámica en C++
Diagrama de Flujo La presentación gráfica de sistemas es una forma ampliamente utilizada como herramienta de análisis, ya que permite identificar aspectos.
CONTROL DE ATAQUES INFORMATICOS
Desarrollo Técnico  EL PROCESO DE CREACIÓN Y DESARROLLO DE UNA TIPOGRAFÍA CUALQUIERA ES, EN LÍNEA GENERAL MUY SIMILAR. AQUÍ NO SE DESCRIBIRÁ EN DETALLE.
Características de “C”
Interconexión Registros Mercantiles UE
Nombre de la empresa Productos y servicios
La Academia al servicio de la Vida
Servidor de Reportes basado en Tecnología Java y XML
PROGRAMACIÓN (2).
Diagrama de Clases Un diagrama de clases esta compuesto por los siguientes elementos: Clase: atributos, métodos y visibilidad. Relaciones: Herencia, Composición,
SISTEMA ELECTRONICO DE CONTROL DE OBRAS BITACORA Versión 2.0
“ENTORNO DE TRABAJO DE ACCESS 2010” ACTIVIDAD DE ADQUISICIÓN DEL CONOCIMIENTO GRISEIDY CLARIBEL VELAZQUEZ RUIZ GPO:423.
Manejo de Punteros y objetos en memoria dinámica en C++
“Conceptos Básicos de Java”
Diseño y Programación Orientados a Objetos
Algunas Características de C++ no presentes en C
Manejo de Punteros y objetos en memoria dinámica en C++
SERVICIOS DE ALMACENAMIENTO EN LA NUBE DE QUE SE TRATA El Almacenamiento en la Nube consiste en guardar archivos en un lugar de Internet. Esos lugares.
Manejo de excepciones Escuela de Ingeniería de Sistemas y Computación Universidad del Valle INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS (IPOO)
Identificación de las aptitudes profesionales entre la población migrante. Herramientas audiovisuales With the support of the Erasmus+ programme of the.
Información general ESPECIALIDAD: ING. DE SISTEMAS CURSO: POO CICLO: TERCERO TIEMPO: 8 SEMANAS SECCIÓN: 1.
Manejo de Punteros y objetos en memoria dinámica en C++
Diseño y Programación Orientados a Objetos
Concepto:La memoria RAM (Random Access Memory) o memoria de acceso aleatorio es un componente físico de nuestro ordenador, generalmente instalado sobre.
GC-F-004 V.01 CENTRO DE INDUSTRIA Y LA CONSTRUCCIÓN REGIONAL TOLIMA.
Curso Redes (IS20) -Capítulo 5 1 Redes (IS20) Ingeniería Técnica en Informática de Sistemas Práctica 3- Estudio de tráfico sobre LAN
Núcleo Lic. Gonzalo Pastor.
Procesos Lic. Gonzalo Pastor.
Estructura de los Sistemas Operativos
Hilos de Procesamiento. Hilos Concepto Beneficios Hilos a nivel kérnel y a nivel usuario Modelos multihilos Hilos de Solaris 2 Hilos de Java.
Transcripción de la presentación:

El módulo “tracemalloc” Jesús Cea Avión jcea@jcea.es @jcea httpS://www.jcea.es/ httpS://blog.jcea.es/ PyConES 2015 - Noviembre 2015

Jesús Cea Avión Programando Python desde 1996 (Python 1.4). Core Developer desde 2008 (Python 2.6 y 3.0). Fundador de Python Madrid y Python España, instrumental para la creación de Python Vigo. Miembro de las dos Juntas Directivas. Listas de correo, repositorio Mercurial, calendario de eventos, Twitter, OpenBadges. Consultor y Freelance a tu disposición. PyConES 2015 - Noviembre 2015

tracemalloc Contabiliza el consumo en cada línea de código. Podemos comparar el uso de memoria en dos momentos diferentes. Permite identificar el “traceback” del punto en el que se ha creado un objeto concreto. Información capturada ajustable. Cero sobrecarga cuando no se usa. Buen complemento para el módulo estándar GC. PyConES 2015 - Noviembre 2015

tracemalloc La información se puede volcar a disco para analizarla en diferido o con otras herramientas. Utiliza los hooks del PEP 0445, muy interesante. Comparado con otros sistemas de profiling de memoria: Incluído en la librería estándar. Permite identificar dónde se ha creado un objeto concreto. No clasifica la memoria por tipo de objeto. PyConES 2015 - Noviembre 2015

tracemalloc Módulo en la librería estándar desde Python 3.4.0. Disponible para Python 2.7 y 3.3. Requiere una versión parcheada del intérprete. Hace falta recompilarlo. https://pypi.python.org/pypi/pytracemalloc/ PyConES 2015 - Noviembre 2015

Ejemplo: régimen estacionario (1) import tracemalloc, threading, time, gc def print_malloc() : while True : time.sleep(60) gc.collect() # Probar a no hacerlo snapshot = tracemalloc.take_snapshot() top_stats = snapshot.statistics('lineno') print("OVERHEAD:", tracemalloc.get_tracemalloc_memory()) print("MEMORIA:", tracemalloc.get_traced_memory()) for stat in top_stats[:10] : print(stat) tracemalloc.start() t = threading.Thread(target=print_malloc) t.setDaemon(True) t.start() PyConES 2015 - Noviembre 2015

Ejemplo: régimen estacionario (2) Ejecutando como “python3”: OVERHEAD: 1157856 MEMORIA: (1968680, 2156452) <frozen importlib._bootstrap>:222: size=622 KiB, count=1747, average=365 B <frozen importlib._bootstrap_external>:473: size=478 KiB, count=5054, average=97 B [...] Ejecutando “PYTHONTRACEMALLOC=1 python3” OVERHEAD: 2689736 MEMORIA: (4583184, 5045464) <frozen importlib._bootstrap_external>:473: size=1446 KiB, count=16515, average=90 B <frozen importlib._bootstrap>:222: size=806 KiB, count=2927, average=282 B PyConES 2015 - Noviembre 2015

Ejemplo: Volcado para análisis posterior import tracemalloc, threading, time, gc def print_malloc() : for i in range(9999999999) : time.sleep(60) gc.collect() snapshot = tracemalloc.take_snapshot() snapshot.dump("z-tracemalloc.%010d.snapshot" %i) tracemalloc.start() t = threading.Thread(target=print_malloc) t.setDaemon(True) t.start() PyConES 2015 - Noviembre 2015

Ejemplo: Leak de memoria >>> import tracemalloc >>> a=tracemalloc.Snapshot.load("000011.snapshot") >>> b=tracemalloc.Snapshot.load("000012.snapshot") >>> for stat in b.compare_to(a, "lineno")[:2] : ... print(stat) ... ./z.py:10: size=50.7 KiB (+3985 B), count=39 (+3), average=1330 B <frozen importlib._bootstrap>:222: size=622 KiB (+0 B), count=1747 (+0), average=365 B >>> len(b.compare_to(a, "lineno")) 943 >>> os.stat("000011.snapshot").st_size 85100 El snapshot incluye información de toda la memoria gestionada, aunque no haya cambios. PyConES 2015 - Noviembre 2015

Ejemplo: Identificar dónde se creó un objeto (1) import tracemalloc tracemalloc.start() a="123" print(tracemalloc.get_object_traceback(a)) a="123"*7 El resultado es: None ./prueba.py:7 El primer caso no reserva memoria, el valor del objeto está directamente en el código compilado. PyConES 2015 - Noviembre 2015

Ejemplo: Identificar dónde se creó un objeto (2) >>> dis.dis(...) 6 0 LOAD_CONST 1 ('123') 3 STORE_FAST 0 (a) [...] 8 25 LOAD_CONST 1 ('123') 28 LOAD_CONST 2 (7) 31 BINARY_MULTIPLY 32 STORE_FAST 0 (a) El primer caso no requiere reservar memoria. El segundo caso construye el valor del objeto en tiempo de ejecución. PyConES 2015 - Noviembre 2015

Sugerencias: Volcar los “snapshots” a disco para análisis cómodo. Tener un hilo para acceso y exploración interactiva. https://docs.python.org/3.5/library/cmd.html Dependiendo de la aplicación, es preferible empezar agrupando por “filename” o por “lineno”. Tracemalloc se puede activar y desactivar en cualquier momento, podemos analizar secciones del programa de forma selectiva. PyConES 2015 - Noviembre 2015

Usos prácticos: Memory leaks. Reducir el consumo de memoria: Caso práctico: Reducir el consumo de memoria al 1.6% cambiando una secuencia [True, False, True...] por una matriz de bits: https://pypi.python.org/pypi/bitarray/ PyConES 2015 - Noviembre 2015

¿Rendimiento? No es para usar en producción en todo tu código: #!/usr/bin/env python3 import timeit import tracemalloc, gc gc.disable() print(timeit.timeit("[i for i in range(10000, 20000)]", number=1000)) tracemalloc.start() tracemalloc.stop() Resultado: 0.788975897000455 5.2604839310006355 0.771576245999313 PyConES 2015 - Noviembre 2015

¿Rendimiento? El consumo de memoria depende del número de “frames” que capturamos. tracemalloc.clear_traces() Puede no ser utilizable en entornos limitados (RaspPi) con programas complejos. PyConES 2015 - Noviembre 2015

¿Preguntas? Visibilidad de la memoria de módulos en C. Combinación de los módulos tracemalloc y gc. Pros y contras entre identificar bloques de memoria e identificar tipos de objetos. Depende de si el programa crea muchos objetos de tipo distinto o no. En Python es típico usar tipos básicos. PyConES 2015 - Noviembre 2015

Referencias adicionales Documentación: https://pytracemalloc.readthedocs.org/ https://docs.python.org/3.5/library/tracemalloc.html https://www.python.org/dev/peps/pep-0454/ https://docs.python.org/3.5/library/gc.html https://www.python.org/dev/peps/pep-0445/ https://docs.python.org/3.5/library/cmd.html Otras opciones de “profiling” de memoria: https://stackoverflow.com/questions/110259/ PyConES 2015 - Noviembre 2015

¡Gracias! Jesús Cea Avión jcea@jcea.es @jcea httpS://www.jcea.es/ httpS://blog.jcea.es/ PyConES 2015 - Noviembre 2015