nginx-c-module-perf
SKILL.md
nginx.org C Module Performance & Reliability Best Practices
Comprehensive performance optimization and reliability guide for nginx C modules, derived from the official nginx development documentation and production engineering experience. Contains 43 rules across 8 categories, prioritized by impact to guide automated optimization and resilience improvements.
Companion skill: This skill complements nginx-c-modules which covers correctness (memory safety, request lifecycle, configuration). This skill covers performance optimization and operational reliability.
When to Apply
Reference these guidelines when:
- Optimizing nginx C module throughput and latency
- Reducing buffer copies and enabling zero-copy I/O paths
- Tuning connection pooling and socket options
- Minimizing shared memory lock contention across workers
- Implementing graceful error recovery and fallback responses
- Configuring upstream timeouts and retry strategies
- Building in-module response caches with shared memory
- Tuning worker process behavior under load
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Buffer & Zero-Copy I/O | CRITICAL | buf- |
| 2 | Connection Efficiency | CRITICAL | conn- |
| 3 | Lock Contention & Atomics | HIGH | lock- |
| 4 | Error Recovery & Resilience | HIGH | err- |
| 5 | Timeout & Retry Strategy | MEDIUM-HIGH | timeout- |
| 6 | Response Caching | MEDIUM | cache- |
| 7 | Worker & Process Tuning | MEDIUM | worker- |
| 8 | Logging & Metrics | LOW-MEDIUM | log- |
Quick Reference
1. Buffer & Zero-Copy I/O (CRITICAL)
buf-chain-reuse- Reuse Buffer Chain Links Instead of Allocating New Onesbuf-file-sendfile- Use File Buffers for Static Content Instead of Reading into Memorybuf-avoid-copy- Avoid Copying Buffers When Passing Through Filter Chainbuf-coalesce-small- Coalesce Small Buffers Before Outputbuf-shadow-reference- Use Shadow Buffers for Derived Data Instead of Full Copiesbuf-recycled-flag- Mark Buffers as Recycled for Upstream Response Reuse
2. Connection Efficiency (CRITICAL)
conn-reusable-queue- Mark Idle Connections as Reusable for Pool Recoveryconn-drain-pressure- Handle Connection Drain Under Memory Pressureconn-tcp-nodelay- Control TCP_NODELAY for Latency-Sensitive Responsesconn-prealloc-pool- Size Connection Pool to Avoid Runtime Reallocationconn-close-linger- Use Lingering Close for Graceful Connection Shutdownconn-ssl-session-reuse- Enable SSL Session Caching in Upstream Connections
3. Lock Contention & Atomics (HIGH)
lock-minimize-critical- Minimize Critical Section Duration in Shared Memorylock-atomic-counters- Use Atomic Operations for Simple Counters Instead of Mutexlock-trylock-fallback- Use ngx_shmtx_trylock with Fallback to Avoid Worker Stallslock-per-worker-aggregate- Aggregate Per-Worker Counters to Reduce Shared Memory Accesslock-alloc-outside- Perform Slab Allocation Outside Hot Pathlock-rw-pattern- Use Read-Copy-Update Pattern for Read-Heavy Shared Data
4. Error Recovery & Resilience (HIGH)
err-cache-errno- Cache ngx_errno Immediately to Prevent Overwriteerr-fallback-response- Return Fallback Response When Upstream Failserr-resource-exhaustion- Handle Pool and Slab Allocation Exhaustion Gracefullyerr-blocked-counter- Use Blocked Counter to Prevent Premature Request Destructionerr-connection-error-check- Check Connection Error Flag Before I/O Operationserr-log-once-pattern- Limit Repeated Error Logging to Prevent Log Storms
5. Timeout & Retry Strategy (MEDIUM-HIGH)
timeout-upstream-phases- Set Separate Timeouts for Connect, Send, and Read Phasestimeout-retry-next-upstream- Configure next_upstream Mask for Retriable Failurestimeout-backoff-reconnect- Use Exponential Backoff for Upstream Reconnection Attemptstimeout-client-body-limit- Set Client Body Timeout to Bound Slow-Client Resource Usage
6. Response Caching (MEDIUM)
cache-shm-lru- Implement LRU Eviction in Shared Memory Cache Zonescache-stampede-lock- Prevent Cache Stampede with Single-Flight Patterncache-key-hash- Use ngx_hash for Fixed Cache Key Lookupscache-ttl-atomic- Use Atomic Timestamp Comparison for TTL Expiry Checkscache-conditional-store- Cache Only Successful Responses to Avoid Negative Cache Pollution
7. Worker & Process Tuning (MEDIUM)
worker-accept-mutex- Understand Accept Mutex Impact on Connection Distributionworker-connection-prealloc- Use Pre-Allocated Free List for Module Data Structuresworker-graceful-shutdown- Handle Worker Shutdown Signal Without Data Lossworker-single-process-debug- Support Single-Process Mode for Debuggingworker-cycle-conf- Access Configuration Through Cycle for Process-Level Operations
8. Logging & Metrics (LOW-MEDIUM)
log-level-guard- Guard Expensive Debug Argument Computation Behind Level Checklog-connection-context- Attach Module Context to Connection Log for Tracinglog-shared-metrics- Collect Metrics via Shared Memory Counterslog-error-dedup- Deduplicate Repeated Error Messages with Throttlinglog-action-string- Set Log Action String for Operation Context
How to Use
Read individual reference files for detailed explanations and code examples:
- Section definitions - Category structure and impact levels
- Rule template - Template for adding new rules
Reference Files
| File | Description |
|---|---|
| references/_sections.md | Category definitions and ordering |
| assets/templates/_template.md | Template for new rules |
| metadata.json | Version and reference information |
Weekly Installs
30
Repository
pproenca/dot-skillsGitHub Stars
71
First Seen
Feb 16, 2026
Security Audits
Installed on
codex27
github-copilot26
gemini-cli26
opencode25
kimi-cli25
cursor25