Тема создана для того чтобы пользователи делились информацией об оптимизации ОС для BAS-са.
[Оптимизация TCP]
Базовая архитектура поиска, которая направляет поиск по нескольким физическим разделам, использует порты TCP / IP и неблокирующие каналы NIO SocketChannels для подключения к поисковым системам. Эти соединения остаются открытыми в состоянии TIME_WAIT, пока операционная система не истечет их тайм-аут. Следовательно, в условиях большой нагрузки доступные порты на машине, на которой работает модуль маршрутизации, могут быть исчерпаны.
На платформах Windows тайм-аут по умолчанию составляет 120 секунд, а максимальное количество портов составляет примерно 4000, в результате максимальная скорость составляет 33 соединения в секунду. Если ваш индекс имеет четыре раздела, для каждого поиска требуется четыре порта, что обеспечивает максимальную скорость запроса 8,3 запроса в секунду.
Формула расчета:
(максимальное количество портов / период ожидания) / количество разделов = максимальная скорость запроса
Если эта скорость превышена, вы можете увидеть сбои, поскольку запас портов TCP / IP исчерпан. Симптомы включают снижение пропускной способности и ошибки, указывающие на сбой сетевых подключений. Вы можете диагностировать эту проблему, наблюдая за системой, пока она находится под нагрузкой, используя утилиту netstat, доступную в большинстве операционных систем.
Чтобы избежать исчерпания портов и поддерживать высокую скорость соединения, уменьшите значение TIME_WAIT и увеличьте диапазон портов.
Чтобы узнать сколько у вас запросов в очереди, пишем в cmd:
netstat -na | find "FIN_WAIT_2" /C
Если вы получите значение больше чем от 10, то у вас весят запросы в очереди.
Для оптимизации tcp стека, выполняем ряд условий.
Действия ниже делать на свой страх и риск!!!
#Для Windows 10, Server 2016, Server 2019:
netsh interface tcp set heuristics disabled
netsh interface tcp set heuristics wsh=enabled
netsh interface tcp set heuristics forcews=disabled
netsh interface tcp set global rss=enabled
netsh interface tcp set global autotuninglevel=normal
netsh interface tcp set global ecncapability=disabled
netsh interface tcp set global timestamps=disabled
netsh interface tcp set global initialrto=3000
netsh interface tcp set global chimney=disabled
netsh interface tcp set global netdma=disabled
netsh interface tcp set global dca=disabled
netsh interface tcp set global rsc=disabled
netsh interface tcp set global nonsackrttresiliency=disabled
netsh interface tcp set global maxsynretransmissions=2
netsh interface ip set global neighborcachelimit=4096
netsh interface ip set global defaultcurhoplimit=64
netsh interface ip set global taskoffload=enabled
netsh interface ip set global mediasenseeventlog=disabled
netsh interface tcp set global prr=disabled
netsh interface tcp set supplemental internet congestionprovider=dctcpnetsh
netsh interface tcp set supplemental datacenter congestionprovider=dctcp
#Для Windows Server 2008, 2012, Windows 7, Windows 8
netsh int tcp set security mpp=disabled
netsh int tcp set security profiles=disabled
netsh int tcp set global rss=enabled
netsh int tcp set global chimney=disabled
netsh int tcp set global netdma=disabled
netsh int tcp set global dca=disabled
netsh int tcp set global autotuninglevel=normal
netsh int tcp set global ecncapability=disabled
netsh interface tcp set global timestamps=disabled
netsh interface tcp set global initialrto=3000
netsh interface tcp set heuristics disabled
netsh interface tcp set heuristics wsh=enabled
netsh interface tcp set heuristics forcews=disabled
netsh interface tcp set global rsc=disabled
netsh interface tcp set global nonsackrttresiliency=disabled
netsh interface tcp set global maxsynretransmissions=2
netsh interface ip set global neighborcachelimit=4096
netsh interface ip set global defaultcurhoplimit=64
netsh interface ip set global taskoffload=enabled
netsh interface ip set global neighborcachelimit=4096
netsh interface ip set global defaultcurhoplimit=64
netsh interface ip set global taskoffload=enabled
netsh interface ip set global mediasenseeventlog=disabled
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\Ndis\Parameters /f /v RssBaseCpu /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\Ndis\Parameters /f /v MaxNumRssCpus /t REG_DWORD /d 8
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v TcpTimedWaitDelay /t REG_DWORD /d 30
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v TcpFinWait2Delay /t REG_DWORD /d 30
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v "Transmission Control Protocol" /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v SynAttackProtect /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v ArpCacheLife /t REG_DWORD /d 86400
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v ArpCacheMinReferencedLife /t REG_DWORD /d 3600
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v ArpCacheSize /t REG_DWORD /d 200
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v DefaultTTL /t REG_DWORD /d 64
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v DisableTaskOffload /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v DnsOutstandingQueriesCount /t REG_DWORD /d 1000
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v DisableTcpChimneyOffload /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v EnableICMPRedirect /t REG_DWORD /d 1
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v EnablePMTUBHDetect /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v EnableWsd /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v ForwardBroadcasts /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v GlobalMaxTcpWindowSize /t REG_DWORD /d 524140
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v IPEnableRouter /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v MaxUserPort /t REG_DWORD /d 65534
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v QualifyingDestinationThreshold /t REG_DWORD /d 3
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v SyncDomainWithMembership /t REG_DWORD /d 1
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v Tcp1323Opts /t REG_DWORD /d 1
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v UseDomainNameDevolution /t REG_DWORD /d 1
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v DisableMediaSenseEventLog /t REG_DWORD /d 1
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v DisableRss /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v EnableAddrMaskReply /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v EnableBcastArpReply /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v EnableConnectionRateLimiting /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v EnableIPAutoConfigurationLimits /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v EnableTCPA /t REG_DWORD /d 1
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v StrictTimeWaitSeqCheck /t REG_DWORD /d 1
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v TCPMaxDataRetransmissions /t REG_DWORD /d 2
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v AllowUnqualifiedQuery /t REG_DWORD /d 1
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v EnableDca /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v TcpUseRFC1122UrgentPointer /t REG_DWORD /d 1
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v TcpMaxDupAcks /t REG_DWORD /d 2
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v OverrideDefaultAddressSelection /t REG_DWORD /d 1
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v EnableTCPChimney /t REG_DWORD /d 1
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v EnablePMTUDiscovery /t REG_DWORD /d 1
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v EnableOffload /t REG_DWORD /d 1
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v EnableHeuristics /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v DontAddDefaultGatewayDefault /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v DeadGWDetectDefault /t REG_DWORD /d 1
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v TcpNumConnections /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v MaxFreeTcbs /t REG_DWORD /d 2000
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters /f /v MaxHashTableSize /t REG_DWORD /d 65536
Поднятия приоритетов:
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\ServiceProvider /f /v LocalPriority /t REG_DWORD /d 499
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\ServiceProvider /f /v HostsPriority /t REG_DWORD /d 500
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\ServiceProvider /f /v DnsPriority /t REG_DWORD /d 2000
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\ServiceProvider /f /v NetbtPriority /t REG_DWORD /d 2001
Настройка параметров интерфейса
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\<GUID> /f /v TcpACKFrequency /t REG_DWORD /d 1
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\<GUID> /f /v TcpDelAckTicks /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\<GUID> /f /v TCPNoDelay /t REG_DWORD /d 1
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\<GUID> /f /v PerformRouterDiscovery /t REG_DWORD /d 0
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters\Interfaces\<GUID> /f /v InterfaceMetric /t REG_DWORD /d 0
*<GUID> - замените на свой интерфейс который найдете, в реестре, по пути что в строке выше. Например: {DB6D12C1-35A4-4C81-B96E-F549D7297DF2}. Айди интерфейса можно определить по IP адресу параметров внутри папки реестра.
Отключаем лишнею фильтрацию (не безопасно если есть открытый доступ к серверу):
reg.exe add HKLM\SYSTEM\CurrentControlSet\Control\Network /f /v FilterClasses /t REG_MULTI_SZ /d "ms_firewall_upper scheduler"
Дополнительные параметры для Windows Server 2016/2019/Windows 10:
netsh interface tcp set global pacingprofile=slowstart
netsh interface tcp set global hystart=disabled
netsh interface tcp set global fastopen=enabled
Включение дополнительных настроек TCP/IP для Windows 10 через Powershell.exe
Get-NetTCPSetting
Get-NetOffloadGlobalSetting
Get-Net6to4Configuration
Get-NetIPv4Protocol
Get-NetAdapterPowerManagement
Для домашних серверов можно так же выключить защиту, которая по факту и сервер не защитит:
netsh int tcp set security mpp=disabled
netsh int tcp set security profiles=disabled
Устанавливаем время жизни ARP кэша на минимум
netsh interface ipv4 show interfaces - чтобы узнать айди интерфейса
netsh interface ipv4 show interface <айди>
netsh interface ipv4 set interface <айди> basereachable=3600000
Отключаем протокол smb2 на Windows Server 20xx
reg.exe add HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters /f /v SMB2 /t REG_DWORD /d 0
Отключаем HomeGroup
reg.exe add HKLM\SOFTWARE\Policies\Microsoft\Windows\HomeGroup /f /v DisableHomeGroup /t REG_DWORD /d 1
Отключаем DNS multicasting (LLMNR)
reg.exe add "HKLM\SOFTWARE\Policies\Microsoft\Windows NT\DnsClient" /f /v EnableMulticast /t REG_DWORD /d 0
Включаем UDP offloading (Windows Server 2016+)
netsh int udp set global uro=enabled
Сброс настроек:
netsh winsock reset
netsh int ip reset
netsh int tcp reset
Тесты TCP ограничений на разных Windows OS при работе BAS-се при стандартных параметрах:
Windows 7: 33 запросов в секунду.
Windows 10: 20 запросов в секунд.
Windows Server 2008: 50 запросов в секунду.
Windows Server 2012: 50 запросов в секунду.
*Все значения тестов указаны при стандартных параметрах настроек tcp.
Если вы нашли ошибку или с чем-то не согласны, напишите в топику.