.. 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

Điều chỉnh bộ đệm hệ thống: Thủ phạm ẩn đằng sau "sự cố mạng"

Tóm tắt điều hành

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.

Các triệu chứng phổ biến của tình trạng cạn kiệt bộ đệm

Hiểu vấn đề

Cơ chế mở rộng cửa sổ TCP

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ủ.

Bộ đệm quan trọng ở đâu

Lệnh chẩn đoán

Chẩn đoán Linux

# 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"

Chẩn đoán Windows

# 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"

Chẩn đoán macOS

# 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

Điều chỉnh bộ đệm Linux

Cài đặt Linux kế thừa (Circa 2009)

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

Cài đặt Linux hiện tại (2025-2026)

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

Ứng dụng cấu hình Linux

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

Điều chỉnh bộ đệm vòng NIC

# 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
Cảnh báo quan trọng - Tiêu thụ bộ nhớ:Các giá trị tcp_mem nằm trong các trang bộ nhớ (thường là 4KB). Kích thước bộ đệm lớn có thể gây ra áp lực bộ nhớ nghiêm trọng:

Điều chỉnh bộ đệm Windows

Cài đặt Windows kế thừa (Circa 2009 - Windows Vista/7/Server 2008)

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

Cài đặt Windows hiện tại (Windows 10/11/Server 2019-2025)

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

Lệnh cấu hình Windows

# 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

Cài đặt bộ đệm NIC nâng cao (thông qua Trình quản lý thiết bị hoặc PowerShell)

# 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

Tinh chỉnh sổ đăng ký (Nâng cao - Sử dụng thận trọng)

# 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)
Cảnh báo:Trên Windows hiện đại (11/10/Server 2019+), hãy tránh sửa đổi sổ đăng ký thủ công trừ khi việc tự động điều chỉnh gây ra sự cố. Các thuật toán tự động điều chỉnh nhìn chung tốt hơn so với cài đặt tĩnh.

Điều chỉnh bộ đệm macOS

Cài đặt macOS kế thừa (Circa 2009 - Mac OS X 10.5/10.6)

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

Cài đặt macOS hiện tại (macOS 12-15 Monterey đến Sequoia)

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

Ứng dụng cấu hình macOS

# 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

Tạo LaunchDaemon cho cài đặt liên tục

# 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
Cảnh báo:macOS Ventura (13) trở lên có các hạn chế Bảo vệ toàn vẹn hệ thống (SIP). Một số tham số kernel có thể không thể sửa đổi được ngay cả với sudo. Kiểm tra cài đặt trong môi trường cụ thể của bạn.

Kiểm tra và xác nhận hiệu suất

Công cụ kiểm tra hiệu suất bộ đệm

iperf3 - Kiểm tra hiệu suất mạng

# 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

tcpdump - Chụp kích thước cửa sổ TCP

# 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'

Phân tích Wireshark

Hãy tìm những dấu hiệu về vấn đề bộ đệm sau:

Giám sát hệ thống

# 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

Tính toán sản phẩm độ trễ băng thông (BDP)

Để 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.

Khuyến nghị cụ thể về khối lượng công việc

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

Những sai lầm và cạm bẫy thường gặp

Những sai lầm cần tránh

Quy trình khắc phục sự cố

  1. Lập đường cơ sở:Đo hiệu suất hiện tại bằng iperf3 hoặc các công cụ tương tự
  2. Chụp gói tin:Sử dụng tcpdump/Wireshark để xác định hành vi của cửa sổ TCP
  3. Kiểm tra thống kê hệ thống:Tìm kiếm sự sụt giảm, cạn kiệt bộ đệm, truyền lại
  4. Tính BDP:Xác định kích thước bộ đệm tối ưu về mặt lý thuyết
  5. Áp dụng các thay đổi gia tăng:Đừng thay đổi mọi thứ cùng một lúc
  6. Kiểm tra và xác nhận:Đo lường mức độ cải thiện hiệu suất thực tế
  7. Theo dõi theo thời gian:Đảm bảo cài đặt vẫn tối ưu dưới các tải khác nhau

Tài liệu tham khảo và đọc thêm

Phần kết luận

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