Elixir Performance Review
Quick Reference
Issue Type Reference
Mailbox overflow, blocking calls references/genserver-bottlenecks.md
When to use ETS, read/write concurrency references/ets-patterns.md
Binary handling, large messages references/memory.md
Task patterns, flow control references/concurrency.md
Review Checklist
GenServer
-
Not a single-process bottleneck for all requests
-
No blocking operations in handle_call/cast
-
Proper timeout configuration
-
Consider ETS for read-heavy state
Memory
-
Large binaries not copied between processes
-
Streams used for large data transformations
-
No unbounded data accumulation
Concurrency
-
Task.Supervisor for dynamic tasks (not raw Task.async)
-
No unbounded process spawning
-
Proper backpressure for message producers
Database
-
Preloading to avoid N+1 queries
-
Pagination for large result sets
-
Indexes for frequent queries
Valid Patterns (Do NOT Flag)
-
Single GenServer for low-throughput - Not all state needs horizontal scaling
-
Synchronous calls for critical paths - Consistency may require it
-
In-memory state without ETS - ETS has overhead for small state
-
Enum over Stream for small collections - Stream overhead not worth it
Context-Sensitive Rules
Issue Flag ONLY IF
GenServer bottleneck Handles > 1000 req/sec OR blocking I/O in callbacks
Use streams Processing > 10k items OR reading large files
Use ETS Read:write ratio > 10:1 AND concurrent access
Before Submitting Findings
Load and follow review-verification-protocol before reporting any issue.