Вам не кажется, что цены на сервера ну чуть чуть завышены...
Минимальный набор сервера в 3 рубля ? вообще никак не стимулирует.
alt text
Тема создана для того чтобы пользователи делились информацией об оптимизации ОС для 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.
Если вы нашли ошибку или с чем-то не согласны, напишите в топику.
Вау, походу это пофиксило мою проблему с 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 Оптимизация ОС под многопоточность:
еще бы под линукс такую бы статейку)
Там все сложно.