.. judul: Penyetelan Buffer Sistem - TCP dan Optimasi Kinerja Jaringan .. slug: penyetelan buffer sistem .. tanggal: 02-02-2026 10:00:00 UTC .. tag: jaringan, kinerja, tuning, tcp, buffer .. kategori: artikel ..tautan: .. deskripsi: Memahami dan mengoptimalkan buffer sistem untuk menyelesaikan masalah kinerja TCP yang sering salah didiagnosis sebagai masalah jaringan .. ketik: teks
Insinyur jaringan sering kali menghadapi situasi di mana jendela TCP atau kinerja aplikasi disalahkan pada infrastruktur jaringan. Setelah melakukan penangkapan paket ekstensif, tcpdumps, dan analisis jaringan, hambatan sebenarnya sering kali ditemukan: NIC (Kartu Antarmuka Jaringan) atau buffer tingkat OS yang habis pada sistem klien atau server.
Artikel ini membahas konfigurasi buffer lama (sekitar tahun 2009) dan saat ini (2025-2026) untuk Linux, Windows, dan macOS, serta teknik diagnostik untuk mengidentifikasi kehabisan buffer sebelum menjadi masalah kritis.
TCP menggunakan mekanisme kontrol aliran di mana penerima mengiklankan "ukuran jendela" yang menunjukkan berapa banyak data yang dapat diterima. Ketika buffer sistem terisi, jendela ini menyusut ke nol, memaksa pengirim untuk menunggu. Ini tampak sebagai masalah jaringan namun sebenarnya merupakan masalah sumber daya host.
# Check current TCP buffer settings sysctl net.ipv4.tcp_rmem sysctl net.ipv4.tcp_wmem sysctl net.core.rmem_max sysctl net.core.wmem_max # Check NIC ring buffer sizes ethtool -g eth0 # Monitor socket buffer usage ss -tm # Check for TCP zero window events tcpdump -i any 'tcp[tcpflags] & tcp-push != 0' -vv # Check network statistics for buffer issues netstat -s | grep -i "buffer\|queue\|drop"
# Check TCP parameters
netsh interface tcp show global
# View network adapter buffer settings
Get-NetAdapterAdvancedProperty -Name "Ethernet" | Where-Object {$_.DisplayName -like "*buffer*"}
# Monitor TCP statistics
netstat -s -p tcp
# Check receive window auto-tuning
netsh interface tcp show global | findstr "Receive Window"
# Check current buffer settings sysctl kern.ipc.maxsockbuf sysctl net.inet.tcp.sendspace sysctl net.inet.tcp.recvspace # View network statistics netstat -s -p tcp # Monitor socket buffers netstat -an -p tcp
| Parameter | Nilai Warisan (2009) | Keterangan |
|---|---|---|
| net.core.rmem_default | 124928 (122KB) | Ukuran buffer soket penerimaan default |
| net.core.rmem_max | 131071 (128KB) | Ukuran buffer soket penerimaan maksimum |
| net.core.wmem_default | 124928 (122KB) | Ukuran buffer soket pengiriman default |
| net.core.wmem_max | 131071 (128KB) | Ukuran buffer soket pengiriman maksimum |
| net.ipv4.tcp_rmem | 4096 87380 174760 | TCP menerima buffer: min, default, max (dalam byte) |
| net.ipv4.tcp_wmem | 4096 16384 131072 | Buffer pengiriman TCP: min, default, max (dalam byte) |
| net.ipv4.tcp_mem | 196608 262144 393216 | Halaman memori TCP: rendah, tekanan, tinggi |
| net.core.netdev_max_backlog | 1000 | Paket maksimum dalam antrian input |
| net.core.optmem_max | 10240 (10KB) | Ukuran buffer tambahan maksimum per soket |
| Parameter | Nilai yang Direkomendasikan Saat Ini | Keterangan |
|---|---|---|
| net.core.rmem_default | 16777216 (16 MB) | Ukuran buffer soket penerimaan default |
| net.core.rmem_max | 134217728 (128MB) | Ukuran buffer soket penerimaan maksimum |
| net.core.wmem_default | 16777216 (16 MB) | Ukuran buffer soket pengiriman default |
| net.core.wmem_max | 134217728 (128MB) | Ukuran buffer soket pengiriman maksimum |
| net.ipv4.tcp_rmem | 4096 87380 134217728 | Buffer penerimaan TCP: min, default, maks (maks 128MB) |
| net.ipv4.tcp_wmem | 4096 65536 134217728 | Buffer pengiriman TCP: min, default, maks (maks 128MB) |
| net.ipv4.tcp_mem | 8388608 12582912 16777216 | Halaman memori TCP: rendah, tekanan, tinggi (sistem 64GB) |
| net.core.netdev_max_backlog | 250000 | Paket maksimum dalam antrian input (10GbE+) |
| net.core.optmem_max | 65536 (64KB) | Ukuran buffer tambahan maksimum per soket |
| net.ipv4.tcp_congestion_control | bbr | Gunakan kontrol kemacetan BBR (algoritma Google) |
| net.ipv4.tcp_window_scaling | 1 | Aktifkan penskalaan jendela TCP (RFC 1323) |
| net.ipv4.tcp_timestamps | 1 | Aktifkan stempel waktu TCP untuk estimasi RTT yang lebih baik |
| net.ipv4.tcp_sack | 1 | Aktifkan Pengakuan Selektif |
| net.ipv4.tcp_no_metrics_save | 1 | Nonaktifkan cache metrik TCP |
Tambahkan pengaturan ini ke/etc/sysctl.confatau buat file baru/etc/sysctl.d/99-network-tuning.conf:
# Network Buffer Tuning for High-Performance Applications # Optimized for 10GbE+ networks with RTT up to 300ms # Core socket buffer settings net.core.rmem_default = 16777216 net.core.rmem_max = 134217728 net.core.wmem_default = 16777216 net.core.wmem_max = 134217728 # TCP buffer settings net.ipv4.tcp_rmem = 4096 87380 134217728 net.ipv4.tcp_wmem = 4096 65536 134217728 net.ipv4.tcp_mem = 8388608 12582912 16777216 # Device buffer settings net.core.netdev_max_backlog = 250000 net.core.netdev_budget = 50000 net.core.netdev_budget_usecs = 5000 net.core.optmem_max = 65536 # TCP optimizations net.ipv4.tcp_congestion_control = bbr net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_timestamps = 1 net.ipv4.tcp_sack = 1 net.ipv4.tcp_no_metrics_save = 1 net.ipv4.tcp_moderate_rcvbuf = 1 # Apply with: sysctl -p /etc/sysctl.d/99-network-tuning.conf
# Check current ring buffer sizes ethtool -g eth0 # Set maximum ring buffer sizes (adjust based on NIC capabilities) ethtool -G eth0 rx 4096 tx 4096 # Make persistent by adding to /etc/network/interfaces or systemd service
| Parameter | Nilai Warisan (2009) | Lokasi |
|---|---|---|
| TcpWindowSize | 65535 (64KB) | Registri: HKLM\System\CurrentControlSet\Services\Tcpip\Parameters |
| Tcp1323Pilihan | 0 (dinonaktifkan) | Penskalaan jendela dinonaktifkan secara default |
| Jendela Penerimaan Default | 8192 (8KB) | Jendela penerimaan default |
| JendelaKirim Default | 8192 (8KB) | Jendela pengiriman default |
| GlobalMaxTcpWindowSize | 65535 (64KB) | Ukuran jendela TCP maksimum |
| Koneksi TcpNum | 16777214 | Koneksi TCP maksimum |
Windows modern menggunakanMenerima Penyetelan Otomatis Jendelafitur, yang secara dinamis menyesuaikan buffer penerimaan berdasarkan kondisi jaringan.
| Fitur | Pengaturan yang Direkomendasikan Saat Ini | Keterangan |
|---|---|---|
| Tingkat Penyetelan Otomatis | normal (atau sangat eksperimental untuk 10GbE+) | Penyesuaian jendela penerimaan dinamis |
| Penskalaan Sisi Terima (RSS) | diaktifkan | Mendistribusikan pemrosesan jaringan ke seluruh CPU |
| Pembongkaran Cerobong | otomatis (atau dinonaktifkan pada NIC modern) | Pembongkaran TCP ke perangkat keras NIC |
| NetDMA | dengan disabilitas | Akses Memori Langsung (tidak digunakan lagi) |
| Parameter Global TCP | Lihat perintah di bawah | Pengaturan TCP seluruh sistem |
| Penyedia Kemacetan | CUBIC (atau pengganti NewReno) | Algoritma kontrol kemacetan TCP |
# Check current auto-tuning level netsh interface tcp show global # Enable auto-tuning (normal mode - default for most scenarios) netsh interface tcp set global autotuninglevel=normal # For high-bandwidth, high-latency networks (10GbE+, data center environments) netsh interface tcp set global autotuninglevel=experimental # For conservative tuning (if experimental causes issues) netsh interface tcp set global autotuninglevel=restricted # For very conservative tuning (not recommended for high-performance networks) netsh interface tcp set global autotuninglevel=highlyrestricted # Enable CUBIC congestion provider (Windows Server 2022/Windows 11+ only) netsh interface tcp set supplemental template=Internet congestionprovider=cubic # Note: Windows 10 and Server 2019 use Compound TCP or NewReno by default # CUBIC is not available on these older versions # Enable Receive-Side Scaling (RSS) netsh interface tcp set global rss=enabled # Set chimney offload (automatic is recommended) netsh interface tcp set global chimney=automatic # Disable NetDMA (recommended for modern systems) netsh interface tcp set global netdma=disabled # Enable Direct Cache Access (if supported) netsh interface tcp set global dca=enabled # Enable ECN (Explicit Congestion Notification) netsh interface tcp set global ecncapability=enabled # Set initial congestion window to 10 (RFC 6928) netsh interface tcp set global initialRto=3000
# View current adapter settings Get-NetAdapterAdvancedProperty -Name "Ethernet" # Increase receive buffers (adjust based on NIC) Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Receive Buffers" -DisplayValue 2048 # Increase transmit buffers Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Transmit Buffers" -DisplayValue 2048 # Enable Jumbo Frames (if network supports it) Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Jumbo Packet" -DisplayValue 9014 # Enable Large Send Offload (LSO) Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Large Send Offload V2 (IPv4)" -DisplayValue Enabled Set-NetAdapterAdvancedProperty -Name "Ethernet" -DisplayName "Large Send Offload V2 (IPv6)" -DisplayValue Enabled
# These settings are typically NOT needed on Windows 10/11 due to auto-tuning # Only modify if auto-tuning is disabled or problematic # Registry path: HKLM\System\CurrentControlSet\Services\Tcpip\Parameters # Maximum TCP window size (if auto-tuning disabled) # TcpWindowSize = 16777216 (16MB) - REG_DWORD # Enable window scaling (enabled by default on modern Windows) # Tcp1323Opts = 3 - REG_DWORD # Number of TCP Timed Wait Delay # TcpTimedWaitDelay = 30 - REG_DWORD (default 240)
| Parameter | Nilai Warisan (2009) | Keterangan |
|---|---|---|
| kern.ipc.maxsockbuf | 262144 (256 KB) | Ukuran buffer soket maksimum |
| net.inet.tcp.sendspace | 32768 (32KB) | Buffer pengiriman TCP default |
| net.inet.tcp.recvspace | 32768 (32KB) | TCP default menerima buffer |
| net.inet.tcp.autorcvbufmax | 131072 (128KB) | Buffer penerimaan maksimum yang disetel secara otomatis |
| net.inet.tcp.autosndbufmax | 131072 (128KB) | Buffer pengiriman maksimum yang disetel secara otomatis |
| net.inet.tcp.rfc1323 | 0 (dinonaktifkan) | Penskalaan jendela TCP |
| Parameter | Nilai yang Direkomendasikan Saat Ini | Keterangan |
|---|---|---|
| kern.ipc.maxsockbuf | 8388608 (8 MB) | Ukuran buffer soket maksimum |
| net.inet.tcp.sendspace | 131072 (128KB) | Buffer pengiriman TCP default |
| net.inet.tcp.recvspace | 131072 (128KB) | TCP default menerima buffer |
| net.inet.tcp.autorcvbufmax | 16777216 (16 MB) | Buffer penerimaan maksimum yang disetel secara otomatis |
| net.inet.tcp.autosndbufmax | 16777216 (16 MB) | Buffer pengiriman maksimum yang disetel secara otomatis |
| net.inet.tcp.rfc1323 | 1 (diaktifkan) | Aktifkan penskalaan jendela TCP |
| net.inet.tcp.sack | 1 (diaktifkan) | Aktifkan Pengakuan Selektif |
| net.inet.tcp.mssdflt | 1440 | Ukuran Segmen Maksimum TCP Default |
| net.inet.tcp.delayed_ack | 3 | Perilaku ACK tertunda |
# Check current settings sysctl kern.ipc.maxsockbuf sysctl net.inet.tcp.sendspace sysctl net.inet.tcp.recvspace sysctl net.inet.tcp.autorcvbufmax sysctl net.inet.tcp.autosndbufmax # Apply settings temporarily (until reboot) sudo sysctl -w kern.ipc.maxsockbuf=8388608 sudo sysctl -w net.inet.tcp.sendspace=131072 sudo sysctl -w net.inet.tcp.recvspace=131072 sudo sysctl -w net.inet.tcp.autorcvbufmax=16777216 sudo sysctl -w net.inet.tcp.autosndbufmax=16777216 sudo sysctl -w net.inet.tcp.rfc1323=1 sudo sysctl -w net.inet.tcp.sack=1 # Make settings persistent (create /etc/sysctl.conf) sudo tee /etc/sysctl.conf <<EOF kern.ipc.maxsockbuf=8388608 net.inet.tcp.sendspace=131072 net.inet.tcp.recvspace=131072 net.inet.tcp.autorcvbufmax=16777216 net.inet.tcp.autosndbufmax=16777216 net.inet.tcp.rfc1323=1 net.inet.tcp.sack=1 net.inet.tcp.mssdflt=1440 net.inet.tcp.delayed_ack=3 EOF # Note: On recent macOS versions, /etc/sysctl.conf may not be read automatically # Use a LaunchDaemon to apply settings at boot
# Create /Library/LaunchDaemons/com.local.sysctl.plist
sudo tee /Library/LaunchDaemons/com.local.sysctl.plist <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.local.sysctl</string>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/sysctl</string>
<string>-w</string>
<string>kern.ipc.maxsockbuf=8388608</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
EOF
sudo chmod 644 /Library/LaunchDaemons/com.local.sysctl.plist
sudo launchctl load /Library/LaunchDaemons/com.local.sysctl.plist
# Server side iperf3 -s # Client side - test TCP throughput iperf3 -c server_ip -t 60 -i 5 -w 16M # Test with multiple parallel streams iperf3 -c server_ip -P 10 -t 60 # Test UDP performance iperf3 -c server_ip -u -b 1000M -t 60
# Capture and display TCP window sizes tcpdump -i any -n 'tcp' -vv | grep -i window # Save capture for Wireshark analysis tcpdump -i any -w /tmp/capture.pcap 'tcp port 443'
Carilah indikator masalah penyangga berikut ini:
# Linux - Monitor network buffer statistics watch -n 1 'cat /proc/net/sockstat' watch -n 1 'ss -tm | grep -i mem' # Check for drops netstat -s | grep -i drop # Windows - Monitor TCP statistics netstat -e 1 # macOS - Monitor network statistics netstat -s -p tcp
Untuk menentukan ukuran buffer optimal untuk jaringan Anda, hitung Produk Penundaan Bandwidth:
BDP = Bandwidth (bits/sec) × RTT (seconds) Example for 10 Gigabit Ethernet with 50ms RTT: BDP = 10,000,000,000 × 0.050 = 500,000,000 bits = 62.5 MB Buffer Size = BDP × 2 (for bidirectional traffic and headroom) Buffer Size = 62.5 MB × 2 = 125 MB This is why modern settings recommend 128MB maximum buffers.
| Jenis Beban Kerja | Ukuran Buffer yang Direkomendasikan | Parameter Utama |
|---|---|---|
| Server Web (latensi rendah) | 4-16 MB | Buffer lebih rendah, koneksi lebih banyak, respons cepat |
| Server Basis Data | 16-32MB | Buffer sedang, throughput konsisten |
| Transfer / Cadangan File | 64-128MB | Buffer maksimum, prioritas throughput tinggi |
| Streaming Video | 32-64MB | Buffer besar, kecepatan pengiriman konsisten |
| HPC / Pusat Data | 128-256MB | Buffer maksimum, kontrol kemacetan khusus |
| Nirkabel / Seluler | 2-8MB | Buffer konservatif, penanganan latensi variabel |
Kehabisan buffer adalah akar penyebab umum masalah kinerja yang tampaknya terkait dengan jaringan. Dengan memahami evolusi ukuran buffer dari batas 128KB pada tahun 2009 hingga kemampuan 128MB saat ini, teknisi jaringan dapat dengan cepat mengidentifikasi dan menyelesaikan masalah ini.
Kesimpulan utama:
Ingat: "Masalah jaringan" yang diungkapkan oleh analisis paket untuk menunjukkan jendela nol TCP sebenarnya adalah masalah sumber daya sistem host. Dengan penyetelan buffer yang tepat, Anda dapat menghilangkan diagnosis palsu ini dan mencapai performa optimal.
Terakhir Diperbarui: 2 Februari 2026
Penulis: Tim Teknis Baud9600