Windows Server 2012 R2 มีพอร์ตชั่วคราว แต่ก็ไม่ควรพอ


13

เราประสบปัญหาแปลก ๆ กับเครือข่ายบนเซิร์ฟเวอร์เฉพาะของเราเป็นประจำ มันรัน Windows Server 2012 R2 x64 บน Xeon E5620 พร้อม RAM ขนาด 16 GB และอะแดปเตอร์เครือข่าย Intel 82575EB

โปรดทราบว่าเราได้ปรับHKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parametersค่าคีย์TcpTimedWaitDelayและMaxUserPortถึง 30 และ 65530 ตามลำดับแล้ว

เมื่อถึงเวลาสุ่มเว็บไซต์ของเราหยุดตอบสนองสาเหตุที่พวกเขาไม่สามารถเชื่อมต่อกับฐานข้อมูลท้องถิ่นได้ จะใช้เวลาประมาณ 2 สัปดาห์เมื่อปัญหานี้เริ่มเกิดขึ้น บันทึกของระบบเริ่มได้รับการเตือน TCPIP 4227 และ 4231.It ระบุว่า "การร้องขอเพื่อจัดสรรหมายเลขพอร์ตชั่วคราวจากพื้นที่พอร์ต TCP ทั่วโลกล้มเหลวเนื่องจากพอร์ตดังกล่าวทั้งหมดถูกใช้งานอยู่"

ถ้าฉันวิ่ง

Get-Counter -Counter \TCPv4\*

หรือ

Get-Counter -Counter \TCPv6\*

หรือ

netstat -abn | find /c ":"

ฉันมักจะได้รับมูลค่าที่เหมาะสมของการเชื่อมต่อ 500-1500 ซึ่งไม่ได้ถึงขีด จำกัด 65K

นอกจากนี้ "localhost" หยุดแก้ไขเป็น :: 1 ภายในเครื่องกลับไปเป็น 127.0.0.1
เฉพาะการเริ่มระบบของเครื่องใหม่เท่านั้นที่สามารถแก้ไขสถานการณ์ได้

อาจเป็นปัญหาของอะแดปเตอร์เครือข่ายหรือไม่

อัพเดท 1

มันเกิดขึ้นอีกครั้งและดูเหมือนว่าจะได้รับการแก้ไขเมื่อฉันรีสตาร์ทเซิร์ฟเวอร์อีเมล แม้ว่าตัวนับทั้งหมดจะมีการเชื่อมต่อประมาณ 1,000 ครั้งโดยที่มีการใช้งาน 500 ~ ในขณะนั้นและยังคงเป็นข้อผิดพลาดซ็อกเก็ต 1,055 เมื่อพยายามเชื่อมต่อกับฐานข้อมูลซึ่งไม่มีอะไรเกี่ยวข้องกับเมลเซิร์ฟเวอร์

อัปเดต 2 นี่เป็นเรื่องแปลก แต่การรีสตาร์ทบริการอีเมลรายวันจะช่วยแก้ไขปัญหาได้อย่างสมบูรณ์


1
ฉันมีปัญหาที่คล้ายกันและลิงค์ต่อไปนี้แก้ไขให้ฉัน: http://blogs.technet.com/b/kimberj/archive/2012/07/06/sever-quot-hangs-quot-and-ephemeral-port- exhaustion-problems.aspx

2
เกี่ยวกับ UPDATE 2. นี่แสดงว่าบริการเมลสร้างการเชื่อมต่อมากเกินไปโดยไม่ปิดและคุณไม่ได้แก้ปัญหา แต่ซ่อนมันไว้จนกว่ามันจะแย่ลงและต้องรีสตาร์ท 2 ครั้งต่อวันในบางครั้ง ... ดูเหมือนว่าซ่อนมากกว่าการแก้ไข ปัญหา ...
มิคาอิล

คำตอบ:


9

ฉันมีปัญหาที่คล้ายกันกับพูลที่หมดสภาพของพอร์ต TCP / IP ใน WinSvr 2012R2 x64 เป็นเวลาเกือบ 1 เดือนที่เซิร์ฟเวอร์หยุดรับการเชื่อมต่อใหม่และ TCP ดังนั้นฉันจึงเล่นกับค่ารีจิสทรีและสิ่งเหล่านี้มีความเสถียรสำหรับฉัน:

[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 - ควรอยู่ในสถานะเริ่มต้นที่ยืดออกไปสูงสุด = 16777214 ควรป้องกันเซิร์ฟเวอร์ไม่ให้พอร์ตชั่วคราวหมดลง
  • TcpMaxDataRetransmissions - ข้อ จำกัด การหมดเวลาของ TCP เซกเมนต์ข้อมูลที่ไม่ได้รับการยอมรับการส่งผ่านข้อมูลใหม่ในการเชื่อมต่อจริง = 5

ในผลลัพธ์เช่นเดียวกับคุณ ฉันคิดว่าคุณควรพิจารณาตรวจสอบพฤติกรรมการใช้งาน / สคริปต์ของคุณ หากทุกอย่างเรียบร้อยและไม่มีอะไรช่วยคุณสามารถลองใส่พร็อกซีเซิร์ฟเวอร์ก่อนเซิร์ฟเวอร์แอปพลิเคชันเว็บของคุณสร้าง 2 โหนดด้วยเว็บเซิร์ฟเวอร์ (IIS, Apache, ... ) ซึ่งจะแบ่งปันเนื้อหาคงที่เดียวกันและเข้าถึงฐานข้อมูลเดียวกันในเวลาเดียวกัน เวลา (ถ้าคุณมีทรัพยากรเพียงพอใน บริษัท ของคุณ)

บางทีบทความนี้จะช่วยคุณในวิธีใดวิธีหนึ่ง: http://blogs.technet.com/b/tristank/archive/2008/03/11/maxuserport-what-it-is-what-it-does-when-it- s-important.aspx


1
คุณควรอ่านคำถามให้ละเอียดก่อนตอบ แน่นอนฉันลองวิธีนี้ก่อนถามมันเป็นเรื่องธรรมดามาก ฉันแก้ไขปัญหาด้วยวิธีอื่นแล้ว
CamaroSS

1
ฉันคิดว่าการเริ่มต้นใหม่ทุกวันของบริการอีเมลไม่ได้แก้ไขปัญหา คุณพบวิธีแก้ไขปัญหาอื่นแล้วหรือยัง
MyKE

3
@CamaroSS: โปรดแบ่งปันโซลูชันของคุณ (หากเกินกว่า "การเริ่มบริการอีเมลใหม่" - นี่ไม่ใช่วิธีแก้ไข) นอกจากนี้คุณอาจจะรู้สึกซาบซึ้งมากขึ้นถ้ามีคนพยายามช่วยเหลือคุณ
สเวน

@CamaroSS และถ้าคุณอ่านคำตอบของฉันอย่างระมัดระวังคุณจะเห็น "ผลลัพธ์เหมือนกับคุณ" จากนั้นฉันก็โพสต์ข้อมูลอื่นแล้ว ..
MyKE

1
การตั้งค่าMaxUserPortยังคงใช้งานได้ในปี 2012 หรือไม่? ฉันคิดว่าในปี 2555 คุณต้องทำผ่านเน็ต เช่น:netsh int ipv4 set dynamicport tcp start=25535 num=40000
rustyx

4

นอกเหนือจากการตั้งค่าไดรเวอร์ Tcpip ช่วงพอร์ต TCP ชั่วคราวได้รับการจัดการใน Windows Server โดยใช้คำสั่งnetsh ( ต้นฉบับ )

คุณสามารถดูช่วงพอร์ตแบบไดนามิกด้วยคำสั่งต่อไปนี้:

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

หากต้องการเปลี่ยนช่วงพอร์ตให้ใช้คำสั่งนี้:

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

ตัวอย่างเช่น:

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

การตั้งค่า (start = 49152 num = 16384 ) เป็นค่าเริ่มต้นใน Windows Server 2008 เป็นต้นไป


ขอบคุณมากสำหรับสิ่งนี้ - ฉันใช้เวลาหลายชั่วโมงในการพยายามแก้ไขปัญหาของฉัน คำแนะนำทั้งหมดที่ฉันสามารถหาได้คือการปรับ MaxUserPort ในรีจิสทรีและไม่มีใครพูดถึง netsh
milosz

3

มีปัญหาเดียวกันนี้ในWindows Server 2016 ที่ใช้การทดสอบซีลีเนียมจำนวนมากโดยใช้ Chromewebdriver สคริปต์ PS นี้จะกำหนดการตั้งค่า @Myke ที่แบ่งปันด้านบนโดยอัตโนมัติ shutdownคำสั่งถูกเพิ่มเข้ามาเพราะการรีบูตเป็นสิ่งจำเป็นสำหรับการเปลี่ยนแปลงการกองซ้อน TCP

เพิ่มขนาดพูลสำหรับพอร์ต TCP ชั่วคราว

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

นี่คือข้อความแสดงข้อผิดพลาดที่เราได้รับเมื่อWebdriver.Quit()แจ้งให้เราทราบว่ามีการใช้ที่อยู่ TCP

ข้อผิดพลาด : EADDRINUSE เชื่อมต่อ EADDRINUSE 127.0.0.1:12843 ที่ ClientRequest (\ node_modules \ selenium-webdriver \ http \ index.js: 238: 15)
จาก : งาน: WebDriver.quit ()


1

คุณแน่ใจหรือไม่ว่าคุณไม่รั่วไหลวัตถุการเชื่อมต่อฐานข้อมูล คุณต้องปิดการเชื่อมต่อฐานข้อมูลทุกครั้งที่เปิดไม่ว่าจะโดยชัดแจ้ง (ด้วยการลองครั้งสุดท้าย) หรือด้วยการใช้บล็อก {} นี่เป็นปัญหาทั่วไปที่ ASP ไม่ได้บอกคุณโดยตรง


มันเป็นไซต์ PHP จำนวนมากส่วนใหญ่ทำงานผ่าน FastCGI โดยใช้การเชื่อมต่อแบบถาวรดังนั้นจึงไม่ควรเป็นเช่นนั้น ถ้าเป็นเช่นนั้นเคาน์เตอร์ระบบจะคืนค่าที่สูงกว่า ฉันยังไม่สามารถอธิบายได้ว่าเหตุใด localhost จึงหยุดแก้ไขเป็น :: 1 และแก้ไขเป็น 127.0.0.1 แทน
CamaroSS

2
:: 1 การหายตัวไปอาจเป็นผลข้างเคียงของการล้นพอร์ตที่อนุญาต - ฉันสงสัยว่า windows ลองใช้ IPv6 ping และเมื่อไม่สามารถรับพอร์ตเพื่อลองได้ก็จะกลับไปเป็น IPv4 PHP อยู่นอกขอบเขตความเชี่ยวชาญของฉัน :-(. โชคดี!
James
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.