Panduan Konfigurasi net.core.somaxconn pada Linux Kernel

Definisi dan Fungsi net.core.somaxconn

net.core.somaxconn adalah parameter kernel Linux yang menentukan batas maksimum jumlah koneksi TCP yang tertunda (pending connections) dalam antrean listen untuk sebuah socket. Secara teknis, ini membatasi panjang antrean backlog yang dapat diterima oleh aplikasi sebelum kernel mulai menolak koneksi baru (SYN packets) dengan pesan Connection Refused.

Jika aplikasi Anda menangani trafik tinggi, nilai default (seringkali 128 pada distribusi lama) seringkali tidak mencukupi, menyebabkan kegagalan koneksi saat terjadi lonjakan trafik (traffic spikes). Meningkatkan nilai ini memungkinkan server menampung lebih banyak permintaan koneksi yang menunggu untuk diproses oleh aplikasi.

Cara Cek dan Mengubah Nilai

Untuk melihat nilai saat ini, gunakan perintah berikut:

sysctl net.core.somaxconn

Untuk mengubah nilai secara sementara (langsung aktif tanpa reboot):

sudo sysctl -w net.core.somaxconn=1024

Untuk membuat perubahan permanen, tambahkan baris berikut ke dalam file /etc/sysctl.conf:

net.core.somaxconn = 1024

Setelah menyimpan file, jalankan sudo sysctl -p untuk memuat konfigurasi baru.

ParameterFungsiRekomendasi Server High-Traffic
net.core.somaxconnBatas antrean backlog1024 - 4096
net.ipv4.tcp_max_syn_backlogAntrean SYN yang belum selesai2048 - 8192
net.core.netdev_max_backlogPaket masuk per interface5000+

Penting: Penyesuaian Aplikasi

Mengubah nilai kernel saja tidak cukup. Aplikasi (seperti Nginx, Apache, atau Node.js) juga memiliki batasan internal untuk backlog. Jika Anda mengatur net.core.somaxconn ke 4096 tetapi konfigurasi Nginx Anda tetap menggunakan nilai default 511, maka sistem akan menggunakan nilai terendah. Pastikan untuk menyesuaikan direktif listen pada konfigurasi aplikasi Anda, contoh pada Nginx:

server { listen 80 backlog=4096; ... }

Troubleshooting

Jika Anda masih melihat error Connection Refused meskipun nilai sudah ditingkatkan, periksa log sistem dengan perintah dmesg | grep -i 'TCP: drop' atau netstat -s | grep -i 'listen' untuk melihat apakah ada paket yang dibuang karena antrean penuh.