System operacyjny: Windows Server 2008, SP2 (działający na EC2 Amazon).
Uruchamianie aplikacji internetowej przy użyciu serwera Apache httpd i tomcat server 6.02 oraz serwera WWW ma ustawienia podtrzymania aktywności.
Istnieje około 69 250 (HTTP port 80) + 15000 (innych niż port 80) połączeń TCP w stanie TIME_WAIT (używane netstat i tcpview). Połączenia te wydają się nie zamykać nawet po zatrzymaniu serwera WWW (oczekiwane 24 godziny)
Liczniki monitorów wydajności:
- Aktywne połączenia TCPv4: 145 KB
- Połączenia pasywne TCPv4: 475 K.
- Połączenia awaryjne TCPv4: 16 KB
- Resetuj połączenia TCPv4: 23 tys
HKEY_LOCAL_MACHINE\System \CurrentControlSet\Services\Tcpip\Parameters
nie ma klucza TcpTimedWaitDelay, więc wartość powinna być wartością domyślną (2 * MSL, 4 minuty)
Nawet jeśli jednocześnie przychodzą tysiące żądań połączenia, dlaczego system operacyjny Windows nie jest w stanie ich ostatecznie wyczyścić?
Jakie mogą być przyczyny tej sytuacji?
Czy istnieje sposób na wymuszenie zamknięcia wszystkich tych połączeń TIME_WAIT bez ponownego uruchamiania systemu operacyjnego Windows?
Po kilku dniach aplikacja przestaje przyjmować nowe połączenia.
źródło
QueryPerformanceCounter
podstawowa przyczyna problemu nadal istnieje i usunięto tylko problem TCP? Dzięki za wgląd!Odpowiedź Ryana jest dobrą ogólną radą, z tą różnicą, że nie dotyczy stanu Ravi w EC2. My także widzieliśmy ten problem iz jakiegokolwiek powodu Windows całkowicie ignoruje TcpTimedWaitDelay i nigdy nie zwalnia gniazda z jego stanu TIMED_WAIT.
Oczekiwanie nie pomaga ... ponowne uruchomienie aplikacji nie pomaga ... jedynym rozwiązaniem, które znaleźliśmy, jest ponowne uruchomienie systemu operacyjnego. Naprawdę brzydka.
źródło
Zupełnie losowo znalazłem ten wątek, próbując debugować osobny problem, ale jest to nieco poruszony, ale dobrze znany problem z Windows na EC2. Kiedyś mieliśmy wsparcia premium, i to z nich omówiono w otoczeniu niepublicznej poprzez ten kanał, ale jest to związane problem, że nie dyskutować na forach publicznych .
Jak wspomnieli inni, musisz dostroić serwery Windows po wyjęciu z pudełka. Jednak w ten sam sposób, w jaki StopWatch nie działa w powyższym wątku, stos TCP / IP również używa
QueryPerformanceCounter
wywołania, aby dokładnie określić, kiedy powinien trwać okres TCP_TIME_WAIT. Problem polega na tym, że na EC2 napotkali i wiedzą o problemie, w którymQueryPerformanceCounter
szaleje i może powrócić w odległych czasach; to nie jest tak, że twój stan TIME_WAIT jest ignorowany, lecz to, że czas wygaśnięcia TIME_WAIT to potencjalnie lata. Podczas pracy w ustawieniach httpd możesz zobaczyć, jak szybko gromadzisz te gniazda zombie po napotkaniu stanu (generalnie widzimy, że jest to dyskretne wydarzenie, a nie, że powoli gromadzisz zombie).To, co robimy, to uruchamianie usługi w tle, która sprawdza liczbę gniazd w stanie TIME_WAIT, a gdy wskaźnik znajdzie się powyżej pewnego progu, podejmujemy działanie (ponownie uruchamiamy serwer). W ciągu ostatnich 45 sekund ktoś wskazał, że możesz zatrzymać / uruchomić serwer, aby rozwiązać problem - sugeruję połączenie tych dwóch metod.
źródło
Domyślne ustawienia stosu TCP w systemie Windows nie są co najmniej optymalne dla systemów, które będą obsługiwać serwer HTTP.
Aby w pełni wykorzystać możliwości komputera z systemem Windows, gdy jest używany jako serwer HTTP, istnieje kilka parametrów, które normalnie poprawiasz, takich jak MaxUserPort TcpTimedWaitDelay, TcpAckFrequency, EnableDynamicBacklog, KeepAliveInterval itp.
Kilka lat temu napisałem do siebie notatkę , na wszelki wypadek, gdybym potrzebował szybkich ustawień domyślnych na początek. Zapoznaj się z parametrami, a następnie popraw je.
źródło
Niepowiązany z AWS, właśnie natrafiliśmy na ten problem, wydaje się, że jest wynikiem tego artykułu z KB:
http://support.microsoft.com/kb/2553549/en-us
Zasadniczo uruchamia się, jeśli system działa przez> 497 dni, a poprawka nie została zastosowana. Ponowne uruchomienie oczywiście oczyściło go - przez 16 miesięcy możemy nie wiedzieć, czy poprawka zadziałała, ale może to pomóc każdemu, kto ma długie serwery.
źródło
Doświadczyłem prawie tego samego na wielu urządzeniach z Windows Server 2008 R2 x64 z SP1, głównie z CLOSE_WAIT (który jest nieco inny niż TIME_WAIT). Natknąłem się na tę odpowiedź, która odwoływała się do KB w Microsoft i poprawki, jeśli serwery działały za modułem równoważenia obciążenia (które są moje). Po zainstalowaniu poprawki i ponownym uruchomieniu komputera wszystkie rzeczy CLOSE_WAIT zostały rozwiązane.
źródło