Regularnie występują dziwne problemy z siecią na naszym dedykowanym serwerze. Działa z systemem Windows Server 2012 R2 x64 na Xeon E5620 z 16 GB pamięci RAM i kartą sieciową Intel 82575EB.
Pamiętaj, że już dostroiliśmy HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
kluczowe wartości TcpTimedWaitDelay
i MaxUserPort
odpowiednio 30 i 65530.
W przypadkowym momencie nasze strony internetowe przestają odpowiadać, ponieważ nie mogą połączyć się z lokalną bazą danych. Problem zaczyna działać około 2 tygodni. Dziennik systemowy zaczyna otrzymywać ostrzeżenia 4227 i 4231 TCPIP. Napisano: „Żądanie przydzielenia efemerycznego numeru portu z globalnej przestrzeni portów TCP nie powiodło się z powodu użycia wszystkich takich portów”.
Jeśli ucieknę
Get-Counter -Counter \TCPv4\*
lub
Get-Counter -Counter \TCPv6\*
lub
netstat -abn | find /c ":"
Zawsze dostaję rozsądną wartość 500-1500 połączeń, co nie jest nawet bliskie limitowi 65K.
Ponadto „localhost” przestaje działać lokalnie na :: 1, powracając do 127.0.0.1
Tylko wymuszony restart komputera może rozwiązać sytuację.
Czy może to być problem z kartą sieciową?
AKTUALIZACJA 1
Zdarzyło się to ponownie i wydawało się, że problem został rozwiązany po ponownym uruchomieniu serwera poczty. Dziwne jednak, wszystkie liczniki pokazały ~ 1000 połączeń przy ~ 500 aktywnych w tej chwili, i nadal błąd gniazda 10055 podczas próby połączenia z bazą danych, która nie ma nic wspólnego z serwerem pocztowym.
AKTUALIZACJA 2 To dziwne, ale codzienne ponowne uruchamianie usług pocztowych całkowicie rozwiązuje problem.
źródło
Odpowiedzi:
Miałem podobny problem z wyczerpaną pulą portów TCP / IP w WinSvr 2012R2 x64 przez prawie 1 miesiąc, gdy serwer przestał odbierać nowe połączenia i połączenia TCP. Grałem więc z wartościami rejestru, które są dla mnie stabilne:
W rezultacie taki sam jak twój. Myślę, że powinieneś rozważyć kontrolę swojego zachowania wydajności aplikacji / skryptów. Jeśli wszystko jest w porządku i nic nie pomaga, możesz spróbować umieścić serwer proxy przed serwerem aplikacji WWW, utworzyć 2 węzły z serwerem sieci (IIS, Apache, ...), które będą współużytkować tę samą zawartość statyczną i uzyskiwać dostęp do tej samej bazy danych w tym samym czas (jeśli masz wystarczająco dużo zasobów w swojej firmie).
Może ten artykuł pomoże Ci w jakiś sposób: http://blogs.technet.com/b/tristank/archive/2008/03/11/maxuserport-what-it-is-what-it-does-when-it- s-important.aspx
źródło
MaxUserPort
nadal działa w 2012 roku? Pomyślałem, że w 2012 r. Musisz to zrobić za pomocą narzędzia netsh. np .:netsh int ipv4 set dynamicport tcp start=25535 num=40000
Oprócz ustawień sterownika Tcpip, efemerycznym zakresem portów TCP zarządza się w systemie Windows Server za pomocą polecenia netsh ( źródło ).
Dynamiczny zakres portów można wyświetlić za pomocą następujących poleceń:
netsh int ipv4 show dynamicport tcp
netsh int ipv4 show dynamicport udp
netsh int ipv6 show dynamicport tcp
netsh int ipv6 show dynamicport udp
Aby zmienić zakres portów, użyj tego polecenia:
netsh int <ipv4|ipv6> set dynamic <tcp|udp> start=number num=range
Na przykład:
netsh int ipv4 set dynamicport tcp start=49152 num=16384
Ustawienie (start = 49152 num = 16384 ) jest również domyślnym ustawieniem w systemie Windows Server 2008 i nowszych .
źródło
Miałem ten sam problem w systemie Windows Server 2016, uruchamiając duże ilości testów selenu przy użyciu narzędzia chromewebdriver. Ten skrypt PS automatycznie skonfiguruje ustawienia @Myke udostępnione powyżej.
shutdown
Komenda została dodana, ponieważ restart jest wymagany do zmiany stos TCP.Zwiększ rozmiar puli dla efemerycznych portów TCP
To był komunikat o błędzie, który otrzymywaliśmy,
Webdriver.Quit()
informując nas, że używany jest adres TCP.źródło
Czy upewniłeś się, że nie przeciekasz obiektów połączenia z bazą danych? Musisz zamknąć każde otwarte połączenie z bazą danych, jawnie (za pomocą try-wreszcie) lub za pomocą bloku using {}. Jest to częsty problem, o którym ASP nie mówi bezpośrednio.
źródło