Windows Server 2012 R2 geçici bağlantı noktalarının bitmesine rağmen


13

Özel sunucumuzda ağ oluşturma konusunda düzenli olarak garip sorunlar yaşıyoruz. Xeon E5620'de 16 GB RAM ve Intel 82575EB ağ bağdaştırıcısı ile Windows Server 2012 R2 x64'ü çalıştırır.

Biz zaten ayarlanmış dikkatinizi çekeriz HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parametersanahtar değerleri TcpTimedWaitDelayve MaxUserPort30 ve 65530 sırasıyla.

Rastgele bir zamanda web sitelerimiz yanıt vermemeye başlar, bunun nedeni yerel bir veritabanına bağlanamaz. Bu konuların ortaya çıkmaya başlaması yaklaşık 2 hafta çalışma süresidir. Sistem günlüğü 4227 ve 4231 numaralı TCPIP uyarılarını almaya başlar.

Koşarsam

Get-Counter -Counter \TCPv4\*

veya

Get-Counter -Counter \TCPv6\*

veya

netstat -abn | find /c ":"

Her zaman 65K sınırına bile yakın olmayan 500-1500 bağlantıların makul değerini alıyorum.

Ayrıca, "localhost" çözümünün yerel olarak :: 1 çözümlenmesini durdurması, 127.0.0.1'e geri dönmesi durumu
yalnızca zorla makinenin yeniden başlatılmasıyla çözebilir.

Bir ağ bağdaştırıcısı sorunu olabilir mi?

GÜNCELLEME 1

Yine oldu ve posta sunucusunu yeniden başlattığımda çözülmüş gibi görünüyordu. Tuhaf olsa da, tüm sayaçlar şu anda ~ 500 bağlantı ile ~ 1000 bağlantı ve posta sunucusuyla ilgisi olmayan veritabanına bağlanmaya çalışırken 10055 soket hatası gösterdi.

GÜNCELLEME 2 Bu garip, ancak posta hizmetlerinin günlük olarak yeniden başlatılması sorunu tamamen giderir.



2
GÜNCELLEME hakkında 2. Bu, posta hizmetlerinin onları kapatmadan çok fazla bağlantı oluşturduğunu ve sorunu çözmediğinizi ancak daha da kötüleşene kadar saklanacağını ve günde 2 kez yeniden başlatılmasının biraz zaman gerektireceğini gösterir ... Çözmek yerine gizlemek gibi görünüyor sorun ...
Mikhail

Yanıtlar:


9

WinSvr 2012R2 x64'te sunucunun yeni ve TCP bağlantılarını almayı bıraktığı neredeyse 1 ay boyunca bitmiş TCP / IP bağlantı noktaları havuzunda benzer bir sorun yaşadım. Bu yüzden kayıt defteri değerleri ile oynadım ve bunlar benim için kararlı:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:0000001e
"MaxUserPort"=dword:0000fffe
"TcpNumConnections"=dword:00fffffe
"TcpMaxDataRetransmissions"=dword:00000005
  • TcpTimedWaitDelay - 30
  • MaxUserPort - 65534
  • TcpNumConnections - varsayılan durumda maksimum = 16777214 değerine gerilmiş olmalıdır, sunucunun geçici bağlantı noktalarını tüketmesini engellemelidir.
  • TcpMaxDataRetransmissions - Gerçek bağlantıda onaylanmamış TCP veri segmentleri yeniden iletiminin zaman aşımı sınırı = 5.

Sonuçta sizinkiyle aynı. Uygulamalarınızın / komut dosyalarınızın performansındaki davranışlarınızı denetlemeyi düşünmelisiniz. Her şey yolundaysa ve hiçbir şey yardımcı olmazsa, web uygulama sunucunuzun önüne proxy sunucusu koymayı deneyebilir, aynı statik içeriği paylaşacak ve aynı veritabanına aynı veritabanına erişecek web sunucusuyla (IIS, Apache, ...) 2 düğüm oluşturabilirsiniz. (şirketinizde yeterli kaynağınız varsa).

Belki bu makale size bir şekilde yardımcı olabilir: http://blogs.technet.com/b/tristank/archive/2008/03/11/maxuserport-what-it-is-what-it-does-when-it- s-important.aspx


1
Cevaplamadan önce soruyu iyice okumalısınız. Tabii ki sormadan önce bu çözümü denedim, çok yaygın. Sorunu başka bir yolla zaten çözdüm.
CamaroSS

1
Ben posta hizmetlerinin günlük yeniden başlatma sorunu çözülmüş olmadığını düşünüyorum. Başka bir çözüm buldunuz mu?
MyKE

3
@CamaroSS: Lütfen çözümünüzü paylaşın ("posta hizmetini yeniden başlatma" nın ötesine geçiyorsa - bu bir çözüm değildir ). Ayrıca, birisi size yardım etmeye çalışırsa belki biraz daha fazla takdir etmelisiniz.
Sven

@CamaroSS Eğer cevabımı dikkatlice okursanız "Sonuç sizinkiyle aynı" ifadesini görürsünüz, o zaman başka bir bilgi daha gönderdim ..
MyKE

1
Ayar MaxUserPort2012'de hala geçerli mi? 2012'de bunu netsh aracılığıyla yapmanız gerektiğini düşündüm. örneğin:netsh int ipv4 set dynamicport tcp start=25535 num=40000
rustyx

4

Tcpip sürücü ayarlarına ek olarak, geçici TCP bağlantı noktası aralığı netsh komutu ( kaynak ) kullanılarak Windows Server'da yönetilir .

Sen edebilirsiniz görüntülemek aşağıdaki komutlarla dinamik bağlantı noktası aralığını:

  • netsh int ipv4 show dynamicport tcp
  • netsh int ipv4 show dynamicport udp
  • netsh int ipv6 show dynamicport tcp
  • netsh int ipv6 show dynamicport udp

To değiştirmek noktası aralığını, bu komutu kullanın:

  • netsh int <ipv4|ipv6> set dynamic <tcp|udp> start=number num=range

Örneğin:

netsh int ipv4 set dynamicport tcp start=49152 num=16384

Windows Server 2008 ve sonraki sürümlerde de ayar (başlangıç ​​= 49152 num = 16384 ) varsayılan değerdir .


Bunun için çok teşekkür ederim - Sorunumu çözmeye çalışmak için saatlerce harcadım. Bulabildiğim tüm tavsiyeler MaxUserPort'u kayıt defterinde ayarlamakla ilgiliydi ve kimse netsh'den bahsetmedi.
milosz

3

Aynı sorunu chromewebdriver kullanarak büyük miktarda Selenyum testleri çalıştıran Windows Server 2016'da da vardı. Bu PS komut dosyası, @Myke'nin yukarıda paylaşılan ayarlarını otomatik olarak yapılandıracak. shutdownBir yeniden TCP küme değişiklikler için gerekli olduğu için komut ilave edildi.

Geçici TCP Bağlantı Noktaları için Havuz Boyutunu Artırma

Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name MaxUserPort -Value 65534 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpTimedWaitDelay -Value 30 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpNumConnections -Value 16777214 -Force | Out-Null
Get-Item 'HKLM:\System\CurrentControlSet\Services\Tcpip\Parameters' | New-ItemProperty -Name TcpMaxDataRetransmissions -Value 5 -Force | Out-Null

shutdown -r -t 0

Bu, Webdriver.Quit()bize bir TCP adresinin kullanımda olduğunu bildiren hata mesajıydı.

Hata : EADDRINUSE EADDRINUSE 127.0.0.1:12843'ü ClientRequest'e bağlayın. (\ node_modules \ selenium-webdriver \ http \ index.js: 238: 15)
Gönderen : Görev: WebDriver.quit ()


1

Veritabanı bağlantı nesnelerini sızdırmadığınızdan emin misiniz? Açılan her veritabanı bağlantısını açık bir şekilde (try-finally ile) veya bir {} bloğu kullanarak kapatmanız gerekir. Bu, ASP'nin size doğrudan anlatmayacağı yaygın bir sorundur.


Bir sürü PHP sitesi, çoğu kalıcı bağlantı kullanarak FastCGI üzerinden çalışıyor, bu yüzden böyle olmamalı. Öyleyse, sistem sayaçları daha yüksek değerler döndürür. Ayrıca localhost'un neden aniden :: 1'e çözümlenmeyi bıraktığını ve bunun yerine 127.0.0.1'e çözümlendiğini açıklayamıyorum.
CamaroSS

2
:: 1 kaybolması muhtemelen sadece izin verilen portları taşmanın bir yan etkisidir - Windows'un bir IPv6 ping denediğinden ve denemeyi yapmak için bir bağlantı noktası alamadığında, IPv4'e geri döndüğünden şüpheleniyorum. PHP benim uzmanlık alanım dışında. :-(. İyi şanslar!
James
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.