.. العنوان: ضبط المخزن المؤقت للنظام - تحسين أداء TCP والشبكة .. سبيكة: ضبط المخزن المؤقت للنظام .. التاريخ: 2026-02-02 10:00:00 بالتوقيت العالمي .. العلامات: الشبكات، الأداء، الضبط، TCP، المخازن المؤقتة .. التصنيف: مقالات .. الرابط : .. الوصف: فهم المخازن المؤقتة للنظام وتحسينها لحل مشكلات أداء TCP التي غالبًا ما يتم تشخيصها بشكل خاطئ على أنها مشكلات في الشبكة .. النوع: نص
يواجه مهندسو الشبكات في كثير من الأحيان مواقف يتم فيها إلقاء اللوم في أداء إطارات TCP أو التطبيقات على البنية التحتية للشبكة. بعد إجراء عمليات التقاط واسعة النطاق للحزم وعمليات tcpdumps وتحليل الشبكة، غالبًا ما يتم اكتشاف عنق الزجاجة الحقيقي: NIC (بطاقة واجهة الشبكة) المستنفدة أو المخازن المؤقتة على مستوى نظام التشغيل على أنظمة العميل أو الخادم.
توفر هذه المقالة كلاً من تكوينات المخزن المؤقت القديمة (حوالي 2009) والحالية (2025-2026) لنظام التشغيل Linux وWindows وmacOS، بالإضافة إلى تقنيات التشخيص لتحديد استنفاد المخزن المؤقت قبل أن تصبح مشكلة حرجة.
يستخدم TCP آلية للتحكم في التدفق حيث يعلن جهاز الاستقبال عن "حجم النافذة" للإشارة إلى مقدار البيانات التي يمكنه قبولها. عندما تمتلئ المخازن المؤقتة للنظام، تتقلص هذه النافذة إلى الصفر، مما يجبر المرسل على الانتظار. يظهر هذا كمشكلة في الشبكة ولكنه في الواقع مشكلة في مورد المضيف.
# 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
| المعلمة | القيمة التراثية (2009) | وصف |
|---|---|---|
| net.core.rmem_default | 124928 (122 كيلو بايت) | حجم المخزن المؤقت لمأخذ التوصيل الافتراضي |
| net.core.rmem_max | 131071 (128 كيلو بايت) | الحد الأقصى لحجم المخزن المؤقت لمأخذ التوصيل |
| net.core.wmem_default | 124928 (122 كيلو بايت) | حجم المخزن المؤقت لمأخذ الإرسال الافتراضي |
| net.core.wmem_max | 131071 (128 كيلو بايت) | الحد الأقصى لحجم المخزن المؤقت لمأخذ الإرسال |
| net.ipv4.tcp_rmem | 4096 87380 174760 | المخزن المؤقت لاستقبال TCP: الحد الأدنى، الافتراضي، الحد الأقصى (بالبايت) |
| net.ipv4.tcp_wmem | 4096 16384 131072 | المخزن المؤقت لإرسال TCP: الحد الأدنى، الافتراضي، الحد الأقصى (بالبايت) |
| net.ipv4.tcp_mem | 196608 262144 393216 | صفحات ذاكرة TCP: منخفض، ضغط، مرتفع |
| net.core.netdev_max_backlog | 1000 | الحد الأقصى للحزم في قائمة انتظار الإدخال |
| net.core.optmem_max | 10240 (10 كيلو بايت) | الحد الأقصى لحجم المخزن المؤقت الإضافي لكل مقبس |
| المعلمة | القيمة الموصى بها الحالية | وصف |
|---|---|---|
| net.core.rmem_default | 16777216 (16 ميجابايت) | حجم المخزن المؤقت لمأخذ التوصيل الافتراضي |
| net.core.rmem_max | 134217728 (128 ميجابايت) | الحد الأقصى لحجم المخزن المؤقت لمأخذ التوصيل |
| net.core.wmem_default | 16777216 (16 ميجابايت) | حجم المخزن المؤقت لمأخذ الإرسال الافتراضي |
| net.core.wmem_max | 134217728 (128 ميجابايت) | الحد الأقصى لحجم المخزن المؤقت لمأخذ الإرسال |
| net.ipv4.tcp_rmem | 4096 87380 134217728 | المخزن المؤقت لاستقبال TCP: الحد الأدنى، الافتراضي، الحد الأقصى (128 ميجابايت كحد أقصى) |
| net.ipv4.tcp_wmem | 4096 65536 134217728 | المخزن المؤقت لإرسال TCP: الحد الأدنى، الافتراضي، الحد الأقصى (128 ميجابايت كحد أقصى) |
| net.ipv4.tcp_mem | 8388608 12582912 16777216 | صفحات ذاكرة TCP: منخفض، ضغط، مرتفع (نظام 64 جيجابايت) |
| net.core.netdev_max_backlog | 250000 | الحد الأقصى للحزم في قائمة انتظار الإدخال (10 جيجابت +) |
| net.core.optmem_max | 65536 (64 كيلو بايت) | الحد الأقصى لحجم المخزن المؤقت الإضافي لكل مقبس |
| net.ipv4.tcp_congestion_control | bbr | استخدم التحكم في ازدحام BBR (خوارزمية Google) |
| net.ipv4.tcp_window_scaling | 1 | تمكين تحجيم نافذة TCP (RFC 1323) |
| net.ipv4.tcp_timestamps | 1 | تمكين الطوابع الزمنية لـ TCP للحصول على تقدير RTT أفضل |
| net.ipv4.tcp_sack | 1 | تمكين الإقرار الانتقائي |
| net.ipv4.tcp_no_metrics_save | 1 | تعطيل التخزين المؤقت لمقاييس TCP |
أضف هذه الإعدادات إلى/etc/sysctl.confأو إنشاء ملف جديد/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
| المعلمة | القيمة التراثية (2009) | موقع |
|---|---|---|
| TcpWindowSize | 65535 (64 كيلو بايت) | التسجيل: HKLM\System\CurrentControlSet\Services\Tcpip\Parameters |
| Tcp1323أوبتس | 0 (معطل) | تم تعطيل تحجيم النافذة بشكل افتراضي |
| DefaultReceiveWindow | 8192 (8 كيلو بايت) | نافذة الاستلام الافتراضية |
| DefaultSendWindow | 8192 (8 كيلو بايت) | نافذة الإرسال الافتراضية |
| GlobalMaxTcpWindowSize | 65535 (64 كيلو بايت) | الحد الأقصى لحجم نافذة TCP |
| TcpNumConnections | 16777214 | الحد الأقصى لاتصالات TCP |
يستخدم نظام Windows الحديثتلقي الضبط التلقائي للنافذةالميزة، التي تقوم بضبط المخازن المؤقتة للتلقي ديناميكيًا بناءً على ظروف الشبكة.
| ميزة | الإعداد الموصى به الحالي | وصف |
|---|---|---|
| مستوى الضبط التلقائي | عادي (أو تجريبي للغاية لـ 10GbE+) | تعديل نافذة الاستلام الديناميكي |
| تحجيم جانب الاستقبال (RSS) | ممكن | توزيع معالجة الشبكة عبر وحدات المعالجة المركزية (CPUs). |
| تفريغ المدخنة | تلقائي (أو معطل في بطاقات NIC الحديثة) | إلغاء تحميل TCP إلى أجهزة NIC |
| NetDMA | عاجز | الوصول المباشر إلى الذاكرة (مهمل) |
| معلمات TCP العالمية | انظر الأوامر أدناه | إعدادات TCP على مستوى النظام |
| مزود الازدحام | مكعب (أو احتياطي NewReno) | خوارزمية التحكم في ازدحام 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)
| المعلمة | القيمة التراثية (2009) | وصف |
|---|---|---|
| kern.ipc.maxsockbuf | 262144 (256 كيلو بايت) | الحد الأقصى لحجم المخزن المؤقت للمأخذ |
| net.inet.tcp.sendspace | 32768 (32 كيلو بايت) | المخزن المؤقت الافتراضي لإرسال TCP |
| net.inet.tcp.recvspace | 32768 (32 كيلو بايت) | المخزن المؤقت لتلقي TCP الافتراضي |
| net.inet.tcp.autorcvbufmax | 131072 (128 كيلو بايت) | الحد الأقصى لمخزن الاستقبال المؤقت الذي تم ضبطه تلقائيًا |
| net.inet.tcp.autosndbufmax | 131072 (128 كيلو بايت) | الحد الأقصى لمخزن الإرسال المؤقت المضبوط تلقائيًا |
| net.inet.tcp.rfc1323 | 0 (معطل) | تحجيم نافذة TCP |
| المعلمة | القيمة الموصى بها الحالية | وصف |
|---|---|---|
| kern.ipc.maxsockbuf | 8388608 (8 ميجابايت) | الحد الأقصى لحجم المخزن المؤقت للمأخذ |
| net.inet.tcp.sendspace | 131072 (128 كيلو بايت) | المخزن المؤقت الافتراضي لإرسال TCP |
| net.inet.tcp.recvspace | 131072 (128 كيلو بايت) | المخزن المؤقت لتلقي TCP الافتراضي |
| net.inet.tcp.autorcvbufmax | 16777216 (16 ميجابايت) | الحد الأقصى لمخزن الاستقبال المؤقت الذي تم ضبطه تلقائيًا |
| net.inet.tcp.autosndbufmax | 16777216 (16 ميجابايت) | الحد الأقصى لمخزن الإرسال المؤقت المضبوط تلقائيًا |
| net.inet.tcp.rfc1323 | 1 (ممكّن) | تمكين تحجيم نافذة TCP |
| net.inet.tcp.sack | 1 (ممكّن) | تمكين الإقرار الانتقائي |
| net.inet.tcp.mssdflt | 1440 | الحد الأقصى لحجم مقطع TCP الافتراضي |
| net.inet.tcp.delayed_ack | 3 | تأخر سلوك ACK |
# 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'
ابحث عن مؤشرات مشكلات المخزن المؤقت هذه:
# 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
لتحديد أحجام المخزن المؤقت الأمثل لشبكتك، قم بحساب منتج تأخير عرض النطاق الترددي:
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.
| نوع عبء العمل | حجم المخزن المؤقت الموصى به | المعلمات الرئيسية |
|---|---|---|
| خادم الويب (زمن الوصول المنخفض) | 4-16 ميجابايت | مخازن مؤقتة أقل، اتصالات أكثر، استجابة سريعة |
| خادم قاعدة البيانات | 16-32 ميجابايت | مخازن مؤقتة معتدلة، وإنتاجية متسقة |
| نقل الملفات / النسخ الاحتياطي | 64-128 ميجابايت | الحد الأقصى للمخازن المؤقتة، وأولوية الإنتاجية العالية |
| بث الفيديو | 32-64 ميجابايت | مخازن كبيرة، ومعدل تسليم ثابت |
| HPC / مركز البيانات | 128-256 ميجابايت | الحد الأقصى من المخازن المؤقتة، والتحكم المتخصص في الازدحام |
| لاسلكي / موبايل | 2-8 ميجا بايت | المخازن المؤقتة المحافظة، ومعالجة الكمون المتغير |
يعد استنفاد المخزن المؤقت سببًا أساسيًا شائعًا لمشكلات الأداء التي يبدو أنها مرتبطة بالشبكة. ومن خلال فهم تطور حجم المخزن المؤقت من حدود 128 كيلو بايت في عام 2009 إلى إمكانيات اليوم البالغة 128 ميجابايت، يستطيع مهندسو الشبكات التعرف على هذه المشكلات وحلها بسرعة.
الوجبات الرئيسية:
تذكر: "مشكلة الشبكة" التي كشف عنها تحليل الحزمة لإظهار عدم وجود نوافذ لـ TCP هي في الواقع مشكلة في موارد النظام المضيف. ومن خلال ضبط المخزن المؤقت المناسب، يمكنك التخلص من هذه التشخيصات الخاطئة وتحقيق الأداء الأمثل.
آخر تحديث: 2 فبراير 2026
المؤلف: الفريق الفني Baud9600