Fundamentos Performance Profiling
Performance profiling identifica cuellos de botella en uso CPU, asignación memoria, I/O red y consultas base de datos.
Áreas Clave Profiling
- CPU Profiling - Identificar rutas código calientes consumiendo ciclos CPU
- Memory Profiling - Encontrar asignaciones memoria y fugas
- I/O Profiling - Detectar operaciones disco y red lentas
- Database Profiling - Optimizar consultas y connection pooling
CPU Profiling
Node.js CPU Profiling
# Profiler integrado
node --prof app.js
# Generar reporte legible
node --prof-process isolate-0x*.log > profile.txt
# Usar clinic flame
npm install -g clinic
clinic flame -- node app.js
Python CPU Profiling
import cProfile
def slow_function():
total = 0
for i in range(1000000):
total += i
return total
# Profilear ejecución
cProfile.run('slow_function()', 'output.prof')
Flame Graphs
# Capturar stack traces
perf record -F 99 -p <PID> -g -- sleep 30
# Generar flame graph
./FlameGraph/flamegraph.pl out.folded > flamegraph.svg
Memory Profiling
Node.js
const v8 = require('v8');
function takeHeapSnapshot(filename) {
v8.writeHeapSnapshot(filename);
}
takeHeapSnapshot('./heap-snapshot.heapsnapshot');
Python
from memory_profiler import profile
@profile
def memory_intensive():
large_list = [i for i in range(1000000)]
return len(large_list)
Database Query Profiling
PostgreSQL
-- Explain query plan
EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'test@example.com';
-- Añadir índice
CREATE INDEX idx_users_email ON users(email);
Estrategias Optimización
Optimización CPU
# Antes: O(n²)
def find_duplicates_slow(arr):
for i in range(len(arr)):
for j in range(i + 1, len(arr)):
if arr[i] == arr[j]:
duplicates.append(arr[i])
# Después: O(n)
def find_duplicates_fast(arr):
seen = set()
duplicates = set()
for item in arr:
if item in seen:
duplicates.add(item)
seen.add(item)
return list(duplicates)
Conclusión
Performance profiling transforma conjeturas en optimización basada en datos. Perfilando sistemáticamente CPU, memoria, red y rendimiento base de datos, ingenieros QA identifican cuellos de botella y validan mejoras con métricas medibles.