Di banyak tutorial, sering terlihat:
worker_processes auto;
Kalau diterjemahkan:
Nginx akan otomatis menyesuaikan jumlah worker dengan jumlah core CPU.
Kedengarannya praktis & aman. Tapi realitanya, tidak selalu optimal, apalagi di production dengan trafik nyata.
Contents
- 1 1. Apa Itu worker_processes?
- 2 2. auto Artinya Apa?
- 3 3. Mengapa Tidak Selalu Optimal?
- 4 4. Faktor yang Mempengaruhi Optimal Worker
- 5 5. Cara Hitung Worker yang Lebih Realistis
- 6 6. Monitor Worker di Production
- 7 7. Kesalahan Fatal dengan auto
- 8 8. Tips Praktis
- 9 9. Studi Kasus
- 10 10. Kesimpulan
- 11 Related Posts
1. Apa Itu worker_processes?
worker_processes menentukan jumlah worker process Nginx:
- Setiap worker = event loop non-blocking
- Menangani request
- Bisa multi-threaded dengan
worker_connectionstinggi
Secara sederhana:
worker × connections = kapasitas maksimum
2. auto Artinya Apa?
- Nginx membaca
/proc/cpuinfo - Mengambil jumlah core CPU fisik/logical
- Set jumlah worker = jumlah core
Kelebihan:
- Konfigurasi cepat
- Tidak perlu hitung manual
3. Mengapa Tidak Selalu Optimal?
1️⃣ Worker Lebih Banyak ≠ Lebih Cepat
- Jika backend lambat → worker tetap menunggu I/O
- Worker idle tapi tetap memakan memori
2️⃣ Overhead Context Switch
- Terlalu banyak worker → CPU bolak-balik context switch
- CPU usage naik, latency meningkat
3️⃣ Worker Sedikit Bisa Lebih Baik
- Dengan
worker_connectionstinggi, 1 worker bisa menangani ribuan koneksi - Tergantung trafik & nature request
4. Faktor yang Mempengaruhi Optimal Worker
- Jenis trafik
- Static file → worker lebih banyak sedikit membantu
- Backend dynamic → terlalu banyak worker tidak berarti
- Jumlah connection per worker (
worker_connections)- Standar: 1024–4096
- Bisa scaling sesuai traffic
- Hardware & OS
- Kernel scheduling
- IRQ affinity
- I/O vs CPU bound
- File static → I/O bound → worker lebih banyak kadang membantu
- PHP-FPM / upstream → CPU bound → worker lebih sedikit, connection tinggi lebih efisien
5. Cara Hitung Worker yang Lebih Realistis
Rumus kasar:
worker_processes ≈ min(num_cores, estimated_concurrent_connections / worker_connections)
Contoh:
- 8 core
- 10.000 concurrent request
- 4.096 worker_connections
Hitung:
needed_worker = ceil(10000 / 4096) ≈ 3
- Bisa set
worker_processes 3;meski CPU punya 8 core - Lebih sedikit context switch, tetap bisa menangani semua koneksi
6. Monitor Worker di Production
Tools yang berguna:
htop→ lihat CPU usage workernginx_status(stub_status module) → active connectionsnetstat / ss→ connection backlog- Log slow requests → pastikan worker tidak overload
7. Kesalahan Fatal dengan auto
- Anggap
auto= always perfect ❌- Bisa overload CPU, memory, context switch tinggi
- Tidak menyesuaikan
worker_connections❌- Worker sedikit + connections rendah = bottleneck
- Tidak memantau actual usage ❌
- Worker idle atau terlalu banyak → sia-sia
8. Tips Praktis
- Mulai dengan
auto→ lihat traffic - Monitor active connections & CPU → tweak manual jika perlu
- Jangan lupa sesuaikan
worker_rlimit_nofile - Gunakan
ulimit -nuntuk membuka file descriptors cukup tinggi
9. Studi Kasus
- Server 8 core, trafik tinggi, backend lambat
worker_processes auto→ CPU usage tinggi, latency naik- Setting manual
worker_processes 4+worker_connections 8192→ latency turun, throughput stabil
10. Kesimpulan
worker_processes auto; praktis tapi bukan jaminan optimal.
Kalimat inti:
Worker yang ideal tergantung traffic, backend, dan hardware, bukan sekadar jumlah core.