Windows Server 2012 R2 hết các cổng phù du, mặc dù vậy không nên


13

Chúng tôi thường xuyên gặp sự cố lạ với mạng trên máy chủ chuyên dụng của chúng tôi. Nó chạy Windows Server 2012 R2 x64 trên Xeon E5620 với RAM 16 GB và bộ điều hợp mạng Intel 82575EB.

Xin lưu ý rằng chúng tôi đã điều chỉnh HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parametersgiá trị quan trọng TcpTimedWaitDelayMaxUserPortđể 30 và 65.530 lượt.

Tại một thời điểm ngẫu nhiên, các trang web của chúng tôi ngừng phản hồi, lý do là chúng không thể kết nối với cơ sở dữ liệu cục bộ. Đó là khoảng 2 tuần thời gian hoạt động khi vấn đề này bắt đầu diễn ra. Nhật ký hệ thống bắt đầu nhận cảnh báo TCPIP 4227 và 4231. Nó nói "Yêu cầu phân bổ số cổng phù du từ không gian cổng TCP toàn cầu đã không thành công do tất cả các cổng như vậy đang được sử dụng.".

Nếu tôi chạy

Get-Counter -Counter \TCPv4\*

hoặc là

Get-Counter -Counter \TCPv6\*

hoặc là

netstat -abn | find /c ":"

Tôi luôn nhận được giá trị hợp lý của 500-1500 kết nối, thậm chí không gần với giới hạn 65K.

Ngoài ra, "localhost" dừng phân giải thành :: 1 cục bộ, trở lại 127.0.0.1
Chỉ khởi động lại máy bắt buộc mới có thể giải quyết tình huống.

Nó có thể là một vấn đề bộ điều hợp mạng?

CẬP NHẬT 1

Nó đã xảy ra một lần nữa và dường như đã được giải quyết khi tôi khởi động lại máy chủ thư. Tuy nhiên, điều kỳ lạ là tất cả các bộ đếm cho thấy ~ 1000 kết nối với ~ 500 đang hoạt động và vẫn xảy ra lỗi ổ cắm 10055 khi cố gắng kết nối với cơ sở dữ liệu không liên quan gì đến máy chủ thư.

CẬP NHẬT 2 Điều này thật lạ, nhưng việc khởi động lại hàng ngày các dịch vụ thư đã khắc phục hoàn toàn sự cố.


1
Tôi đã gặp một vấn đề tương tự và liên kết sau đã khắc phục nó cho tôi: http://bloss.technet.com/b/kimberj/archive/2012/07/06/sever-quot-hangs-quot-and-ephemeral-port- kiệt sức-vấn đề.aspx

2
Giới thiệu về CẬP NHẬT 2. Vì vậy, điều này chỉ đơn giản chỉ ra rằng các dịch vụ thư tạo ra quá nhiều kết nối mà không đóng chúng và bạn không giải quyết được vấn đề mà chỉ cần ẩn nó cho đến khi nó trở nên tồi tệ hơn và 2 lần khởi động lại mỗi ngày sẽ được yêu cầu ... Có vẻ như ẩn hơn là giải quyết vấn đề ...
Mikhail

Câu trả lời:


9

Tôi đã gặp vấn đề tương tự với nhóm cổng TCP / IP cạn kiệt trên WinSvr 2012R2 x64 trong gần 1 tháng khi máy chủ ngừng nhận bất kỳ kết nối TCP và mới nào. Vì vậy, tôi đã chơi với các giá trị đăng ký và chúng ổn định với tôi:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:0000001e
"MaxUserPort"=dword:0000fffe
"TcpNumConnections"=dword:00fffffe
"TcpMaxDataRetransmissions"=dword:00000005
  • TcpTimedWaitDelay - 30
  • Cổng MaxUser - 65534
  • TcpNumConnections - phải ở trạng thái mặc định được kéo dài tối đa = 16777214 sẽ ngăn máy chủ làm cạn kiệt các cổng phù du.
  • TcpMaxDataRetransmissions - Giới hạn hết thời gian truyền lại các phân đoạn dữ liệu chưa được kiểm tra của TCP trên kết nối thực tế = 5.

Kết quả giống như của bạn. Tôi nghĩ bạn nên xem xét để kiểm tra hành vi của bạn về hiệu suất ứng dụng / tập lệnh của bạn. Nếu mọi thứ đều ổn và không có gì giúp ích, thì bạn có thể thử đặt máy chủ proxy trước máy chủ ứng dụng web của mình, tạo 2 nút với máy chủ web (IIS, Apache, ...) sẽ chia sẻ cùng một nội dung tĩnh và truy cập cùng một cơ sở dữ liệu thời gian (nếu bạn có đủ nguồn lực trong công ty của bạn).

Có lẽ bài viết này sẽ giúp bạn theo một cách nào đó: http://blogs.technet.com/b/tristank/archive/2008/03/11/maxuserport-what-it-is-what-it-does-when-it- s-quan trọng.aspx


1
Bạn nên đọc kỹ câu hỏi trước khi trả lời. Tất nhiên tôi đã thử giải pháp này trước khi hỏi, nó rất phổ biến. Tôi đã giải quyết vấn đề bằng cách khác.
CamaroSS

1
Tôi nghĩ rằng khởi động lại hàng ngày của các dịch vụ thư không được giải quyết vấn đề. Bạn đã tìm thấy một giải pháp khác?
MyKE

3
@CamaroSS: Vui lòng chia sẻ giải pháp của bạn (nếu nó vượt ra ngoài "khởi động lại dịch vụ thư" - đây không phải là giải pháp). Ngoài ra, có lẽ bạn nên đánh giá cao nó hơn một chút nếu ai đó cố gắng giúp bạn.
Sven

@CamaroSS Và nếu bạn đọc cẩn thận câu trả lời của tôi, bạn sẽ thấy "Kết quả giống như của bạn", sau đó tôi đã đăng một thông tin khác ..
MyKE

1
Cài đặt MaxUserPortvẫn hoạt động trong năm 2012? Tôi nghĩ năm 2012 bạn phải làm điều đó qua Netsh. ví dụ:netsh int ipv4 set dynamicport tcp start=25535 num=40000
rustyx

4

Ngoài các cài đặt trình điều khiển Tcpip, phạm vi cổng TCP phù hợp được quản lý trong Windows Server bằng lệnh Netsh ( nguồn ).

Bạn có thể xem phạm vi cổng động bằng các lệnh sau:

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

Để thay đổi phạm vi cổng, sử dụng lệnh này:

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

Ví dụ:

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

Cài đặt (start = 49152 num = 16384 ) cũng là mặc định trên Windows Server 2008 trở đi.


Cảm ơn bạn rất nhiều vì điều này - tôi đã dành hàng giờ để cố gắng giải quyết vấn đề của mình. Tất cả lời khuyên tôi có thể tìm thấy là về việc điều chỉnh MaxUserPort trong sổ đăng ký và không ai đề cập đến Netsh.
milosz

3

Có vấn đề tương tự trên Windows Server 2016 khi chạy một số lượng lớn các bài kiểm tra Selen bằng cách sử dụng chromewebdo. Tập lệnh PS này sẽ tự động định cấu hình các cài đặt @Myke đã chia sẻ ở trên. Các shutdownlệnh đã được bổ sung bởi vì khi khởi động lại là cần thiết cho những thay đổi TCP stack.

Tăng kích thước nhóm cho các cổng TCP phù du

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

Đây là thông báo lỗi mà chúng tôi đã nhận được khi Webdriver.Quit()cho chúng tôi biết rằng địa chỉ TCP đang được sử dụng.

Lỗi : EADDRINUSE kết nối EADDRINUSE 127.0.0.1:12843 tại ClientRequest. (\ node_modules \ selenium-webdo \ http \ index.js: 238: 15)
Từ : Nhiệm vụ: WebDriver.quito ()


1

Bạn đã chắc chắn rằng bạn không rò rỉ các đối tượng kết nối cơ sở dữ liệu? Bạn phải đóng mọi kết nối cơ sở dữ liệu được mở, rõ ràng (với lần thử cuối cùng) hoặc với khối {} đang sử dụng. Đây là một vấn đề phổ biến mà ASP sẽ không trực tiếp cho bạn biết.


Đó là một loạt các trang web PHP, hầu hết trong số họ đang chạy qua FastCGI bằng cách sử dụng kết nối liên tục, vì vậy không nên như vậy. Nếu đúng như vậy, thì bộ đếm hệ thống sẽ trả về giá trị cao hơn. Tôi cũng không thể giải thích tại sao localhost đột nhiên dừng lại để giải quyết thành :: 1 và thay vào đó giải quyết thành 127.0.0.1.
CamaroSS

2
:: 1 biến mất có lẽ chỉ là tác dụng phụ của việc tràn các cổng cho phép - Tôi nghi ngờ rằng các cửa sổ sẽ thử ping IPv6 và khi không thể lấy cổng để thực hiện thử, nó sẽ quay trở lại IPv4. PHP nằm ngoài lĩnh vực chuyên môn của tôi. :-(. Chúc may mắn!
James
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.