.. title: Điều chỉnh bộ đệm hệ thống - TCP và tối ưu hóa hiệu suất mạng .. sên: điều chỉnh bộ đệm hệ thống .. ngày: 2026-02-02 10:00:00 UTC .. tags: mạng, hiệu suất, điều chỉnh, tcp, bộ đệm .. chuyên mục: bài viết .. liên kết: .. mô tả: Hiểu và tối ưu hóa bộ đệm hệ thống để giải quyết các vấn đề về hiệu suất TCP thường bị chẩn đoán nhầm là sự cố mạng .. loại: văn bản
Các kỹ sư mạng thường xuyên gặp phải tình huống trong đó cửa sổ TCP hoặc hiệu suất ứng dụng bị đổ lỗi cho cơ sở hạ tầng mạng. Sau khi thực hiện thu thập gói, tcpdump và phân tích mạng trên phạm vi rộng, nút cổ chai thực sự thường được phát hiện: NIC (Thẻ giao diện mạng) hoặc bộ đệm cấp hệ điều hành trên hệ thống máy khách hoặc máy chủ đã cạn kiệt.
Bài viết này cung cấp cả cấu hình bộ đệm cũ (khoảng năm 2009) và hiện tại (2025-2026) cho Linux, Windows và macOS, cùng với các kỹ thuật chẩn đoán để xác định tình trạng cạn kiệt bộ đệm trước khi nó trở thành sự cố nghiêm trọng.
TCP sử dụng cơ chế kiểm soát luồng trong đó người nhận quảng cáo "kích thước cửa sổ" cho biết lượng dữ liệu có thể chấp nhận. Khi bộ đệm hệ thống đầy, cửa sổ này co lại về 0, buộc người gửi phải chờ. Điều này có vẻ như là sự cố mạng nhưng thực chất là sự cố tài nguyên máy chủ.
# 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
| tham số | Giá trị di sản (2009) | Sự miêu tả |
|---|---|---|
| net.core.rmem_default | 124928 (122KB) | Kích thước bộ đệm ổ cắm nhận mặc định |
| net.core.rmem_max | 131071 (128KB) | Kích thước bộ đệm ổ cắm nhận tối đa |
| net.core.wmem_default | 124928 (122KB) | Kích thước bộ đệm ổ cắm gửi mặc định |
| net.core.wmem_max | 131071 (128KB) | Kích thước bộ đệm ổ cắm gửi tối đa |
| net.ipv4.tcp_rmem | 4096 87380 174760 | Bộ đệm nhận TCP: tối thiểu, mặc định, tối đa (tính bằng byte) |
| net.ipv4.tcp_wmem | 4096 16384 131072 | Bộ đệm gửi TCP: tối thiểu, mặc định, tối đa (tính bằng byte) |
| net.ipv4.tcp_mem | 196608 262144 393216 | Các trang bộ nhớ TCP: thấp, áp suất, cao |
| net.core.netdev_max_backlog | 1000 | Số gói tối đa trong hàng đợi đầu vào |
| net.core.optmem_max | 10240 (10KB) | Kích thước bộ đệm phụ trợ tối đa trên mỗi ổ cắm |
| tham số | Giá trị đề xuất hiện tại | Sự miêu tả |
|---|---|---|
| net.core.rmem_default | 16777216 (16MB) | Kích thước bộ đệm ổ cắm nhận mặc định |
| net.core.rmem_max | 134217728 (128MB) | Kích thước bộ đệm ổ cắm nhận tối đa |
| net.core.wmem_default | 16777216 (16MB) | Kích thước bộ đệm ổ cắm gửi mặc định |
| net.core.wmem_max | 134217728 (128MB) | Kích thước bộ đệm ổ cắm gửi tối đa |
| net.ipv4.tcp_rmem | 4096 87380 134217728 | Bộ đệm nhận TCP: tối thiểu, mặc định, tối đa (tối đa 128 MB) |
| net.ipv4.tcp_wmem | 4096 65536 134217728 | Bộ đệm gửi TCP: tối thiểu, mặc định, tối đa (tối đa 128 MB) |
| net.ipv4.tcp_mem | 8388608 12582912 16777216 | Các trang bộ nhớ TCP: thấp, áp suất, cao (hệ thống 64GB) |
| net.core.netdev_max_backlog | 250000 | Số gói tối đa trong hàng đợi đầu vào (10GbE+) |
| net.core.optmem_max | 65536 (64KB) | Kích thước bộ đệm phụ trợ tối đa trên mỗi ổ cắm |
| net.ipv4.tcp_congestion_control | bbr | Sử dụng kiểm soát tắc nghẽn BBR (thuật toán của Google) |
| net.ipv4.tcp_window_scaling | 1 | Kích hoạt tính năng chia tỷ lệ cửa sổ TCP (RFC 1323) |
| net.ipv4.tcp_timestamps | 1 | Bật dấu thời gian TCP để ước tính RTT tốt hơn |
| net.ipv4.tcp_sack | 1 | Kích hoạt xác nhận có chọn lọc |
| net.ipv4.tcp_no_metrics_save | 1 | Vô hiệu hóa bộ nhớ đệm của số liệu TCP |
Thêm các cài đặt này vào/etc/sysctl.confhoặc tạo một tập tin mới/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
| tham số | Giá trị di sản (2009) | Vị trí |
|---|---|---|
| Kích thước cửa sổ Tcp | 65535 (64KB) | Sổ đăng ký: HKLM\System\CurrentControlSet\Services\Tcpip\Parameters |
| Tcp1323Tùy chọn | 0 (bị vô hiệu hóa) | Chia tỷ lệ cửa sổ bị tắt theo mặc định |
| Cửa sổ nhận mặc định | 8192 (8KB) | Cửa sổ nhận mặc định |
| Cửa sổ gửi mặc định | 8192 (8KB) | Cửa sổ gửi mặc định |
| Kích thước cửa sổ GlobalMaxTcp | 65535 (64KB) | Kích thước cửa sổ TCP tối đa |
| TcpNumKết nối | 16777214 | Kết nối TCP tối đa |
Windows hiện đại sử dụngNhận tính năng tự động điều chỉnh cửa sổtính năng tự động điều chỉnh bộ đệm nhận dựa trên điều kiện mạng.
| Tính năng | Cài đặt được đề xuất hiện tại | Sự miêu tả |
|---|---|---|
| Mức độ tự động điều chỉnh | bình thường (hoặc mang tính thử nghiệm cao đối với 10GbE+) | Điều chỉnh cửa sổ nhận động |
| Chia tỷ lệ bên nhận (RSS) | đã bật | Phân phối xử lý mạng trên các CPU |
| Giảm tải ống khói | tự động (hoặc bị vô hiệu hóa trên các NIC hiện đại) | Giảm tải TCP sang phần cứng NIC |
| NetDMA | tàn tật | Truy cập bộ nhớ trực tiếp (không dùng nữa) |
| Tham số toàn cầu TCP | Xem các lệnh bên dưới | Cài đặt TCP toàn hệ thống |
| Nhà cung cấp tắc nghẽn | CUBIC (hoặc dự phòng NewReno) | Thuật toán điều khiển tắc nghẽn 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)
| tham số | Giá trị di sản (2009) | Sự miêu tả |
|---|---|---|
| kern.ipc.maxsockbuf | 262144 (256KB) | Kích thước bộ đệm ổ cắm tối đa |
| net.inet.tcp.sendspace | 32768 (32KB) | Bộ đệm gửi TCP mặc định |
| net.inet.tcp.recvspace | 32768 (32KB) | Bộ đệm nhận TCP mặc định |
| net.inet.tcp.autorcvbufmax | 131072 (128KB) | Bộ đệm nhận được điều chỉnh tự động tối đa |
| net.inet.tcp.autosndbufmax | 131072 (128KB) | Bộ đệm gửi được điều chỉnh tự động tối đa |
| net.inet.tcp.rfc1323 | 0 (bị vô hiệu hóa) | Chia tỷ lệ cửa sổ TCP |
| tham số | Giá trị đề xuất hiện tại | Sự miêu tả |
|---|---|---|
| kern.ipc.maxsockbuf | 8388608 (8MB) | Kích thước bộ đệm ổ cắm tối đa |
| net.inet.tcp.sendspace | 131072 (128KB) | Bộ đệm gửi TCP mặc định |
| net.inet.tcp.recvspace | 131072 (128KB) | Bộ đệm nhận TCP mặc định |
| net.inet.tcp.autorcvbufmax | 16777216 (16MB) | Bộ đệm nhận được điều chỉnh tự động tối đa |
| net.inet.tcp.autosndbufmax | 16777216 (16MB) | Bộ đệm gửi được điều chỉnh tự động tối đa |
| net.inet.tcp.rfc1323 | 1 (đã bật) | Kích hoạt tính năng chia tỷ lệ cửa sổ TCP |
| net.inet.tcp.sack | 1 (đã bật) | Kích hoạt xác nhận có chọn lọc |
| net.inet.tcp.mssdflt | 1440 | Kích thước phân đoạn tối đa TCP mặc định |
| net.inet.tcp.delayed_ack | 3 | Hành vi ACK bị trì hoãn |
# 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'
Hãy tìm những dấu hiệu về vấn đề bộ đệm sau:
# 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
Để xác định kích thước bộ đệm tối ưu cho mạng của bạn, hãy tính Sản phẩm độ trễ băng thông:
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.
| Loại khối lượng công việc | Kích thước bộ đệm được đề xuất | Thông số chính |
|---|---|---|
| Máy chủ Web (Độ trễ thấp) | 4-16MB | Bộ đệm thấp hơn, nhiều kết nối hơn, phản hồi nhanh |
| Máy chủ cơ sở dữ liệu | 16-32MB | Bộ đệm vừa phải, thông lượng ổn định |
| Truyền tệp / Sao lưu | 64-128 MB | Bộ đệm tối đa, ưu tiên thông lượng cao |
| Truyền phát video | 32-64MB | Bộ đệm lớn, tốc độ phân phối ổn định |
| HPC / Trung tâm dữ liệu | 128-256MB | Bộ đệm tối đa, kiểm soát tắc nghẽn chuyên dụng |
| Không dây / Di động | 2-8 MB | Bộ đệm bảo thủ, xử lý độ trễ thay đổi |
Việc cạn kiệt bộ đệm là nguyên nhân gốc rễ phổ biến của các vấn đề về hiệu suất dường như có liên quan đến mạng. Bằng cách hiểu rõ sự phát triển của kích thước bộ đệm từ giới hạn 128KB năm 2009 đến khả năng 128 MB ngày nay, các kỹ sư mạng có thể nhanh chóng xác định và giải quyết những vấn đề này.
Những điểm chính:
Hãy nhớ: "Sự cố mạng" được phát hiện qua phân tích gói để hiển thị cửa sổ TCP zero thực sự là sự cố tài nguyên hệ thống máy chủ. Với việc điều chỉnh bộ đệm thích hợp, bạn có thể loại bỏ những chẩn đoán sai này và đạt được hiệu suất tối ưu.
Cập nhật lần cuối: ngày 2 tháng 2 năm 2026
Tác giả: Đội ngũ kỹ thuật Baud9600