up
Оптимизация ОС под многопоточность
-
Тема создана для того чтобы пользователи делились информацией об оптимизации ОС для 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=disabledreg.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.Если вы нашли ошибку или с чем-то не согласны, напишите в топику. -
Вау, походу это пофиксило мою проблему с Already in use, закрепите где-то на форуме
-
чесн говоря и для 2012 r2 не до конца подходит, если запросов очень много то умирает. Очередь 2к на моем недопрокси сервер. Но для клиента норм.
-
спасибо. норм подборка.
на винде 2019 нужно использовать
netsh int tcp set supplemental Internet congestionprovider=noneвместо
netsh interface tcp set global congestionprovider=none( иначе: Параметр congestionprovider можно задать с помощью команды "netsh int tcp set supplemental". Параметр задан неверно. )
ну и похоже, что можно добавить
netsh int tcp set global rsc=disabled Set-NetOffloadGlobalSetting -ReceiveSegmentCoalescing disabled netsh int tcp set heuristics forcews=disabled netsh int tcp set global maxsynretransmissions=2 netsh int tcp set global nonsackrttresiliency=disable Set-NetTCPSetting -SettingName Internet -InitialCongestionWindow 10 netsh int tcp set supplemental template=Internet icw=10 -
@oleg4ever netsh int tcp set supplemental template=Internet icw=10 Выбил ошибку Set supplemental command failed to update the specified template. The request is not supported.
-
Я вижу, что статья изменилась. Могу ошибаться, но старые настройки были лучше.
-
Небольшое замечание:
Если на сервере работает BAS и один браузер с прокси, то открыто будет одно соединение(тунель) к прокси. К примеру, если запущено 50 браузеров - будет открыто 50 соединений, даже если во вкладке каждого браузера куча всякой сетевой активности.
Смысла тюнить TCP/IP в этой ситуации я не вижу.
-
а может быть netstat -na | find "FIN_WAIT_2" /C большим из-за медленной прокси?
-
@nazar21015 said in Оптимизация ОС под многопоточность:
а может быть netstat -na | find "FIN_WAIT_2" /C большим из-за медленной прокси?
Если сервер с прокси не закрывает соединение, то соединение перейдет в этот статус и будет так висеть, пока не закроется по таймауту.
-
еще бы под линукс такую бы статейку)
-
@nazar21015 said in Оптимизация ОС под многопоточность:
еще бы под линукс такую бы статейку)
Там все сложно.
-
M Moderator moved this topic from Off topic on