Windows Server 2012 R2 kehabisan porta fana, meskipun seharusnya tidak

13

Kami secara teratur mengalami masalah aneh dengan jaringan di server khusus kami. Ini menjalankan Windows Server 2012 R2 x64 pada Xeon E5620 dengan 16 GB RAM dan adaptor jaringan Intel 82575EB.

Harap dicatat bahwa kami sudah disetel HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parametersnilai-nilai kunci TcpTimedWaitDelaydan MaxUserPort30 dan 65.530 masing-masing.

Secara acak, situs web kami berhenti merespons, alasannya mereka tidak dapat terhubung ke database lokal. Ini sekitar 2 minggu uptime ketika masalah ini mulai terjadi. Log sistem mulai mendapatkan peringatan TCPIP 4227 dan 4231. Ini menyatakan "Permintaan untuk mengalokasikan nomor port sementara dari ruang port TCP global telah gagal karena semua port tersebut sedang digunakan.".

Jika saya lari

Get-Counter -Counter \TCPv4\*

atau

Get-Counter -Counter \TCPv6\*

atau

netstat -abn | find /c ":"

Saya selalu mendapatkan nilai wajar koneksi 500-1500, yang bahkan tidak mendekati batas 65K.

Selain itu, "localhost" berhenti menyelesaikan ke :: 1 secara lokal, kembali ke 127.0.0.1.
Hanya mesin paksa restart yang dapat menyelesaikan situasi.

Mungkinkah itu masalah adaptor jaringan?

PEMBARUAN 1

Itu terjadi lagi dan tampaknya telah diselesaikan ketika saya me-restart server email. Anehnya, semua penghitung menunjukkan ~ 1000 koneksi dengan ~ 500 sedang aktif saat ini, dan masih kesalahan 10055 socket ketika mencoba untuk terhubung ke database yang tidak ada hubungannya dengan server mail.

UPDATE 2 Ini aneh, tetapi restart setiap hari dari layanan surat memperbaiki masalah sepenuhnya.

CamaroSS
sumber
1
Saya memiliki masalah yang serupa dan tautan berikut memperbaikinya untuk saya: http://blogs.technet.com/b/kimberj/archive/2012/07/06/sever-quot-hangs-quot-and-ephemeral-port- exhaustion-issues.aspx
2
Tentang PEMBARUAN 2. Jadi ini hanya menunjukkan bahwa layanan email menghasilkan terlalu banyak koneksi tanpa menutupnya dan Anda tidak memecahkan masalah tetapi sembunyikan saja hingga menjadi lebih buruk dan 2 restart per hari akan diperlukan waktu ... Sepertinya bersembunyi daripada menyelesaikan masalah ...
Mikhail

Jawaban:

9

Saya memiliki masalah yang sama dengan kumpulan port TCP / IP yang habis pada WinSvr 2012R2 x64 selama hampir 1 bulan di mana server berhenti menerima koneksi TCP dan baru. Jadi saya bermain dengan nilai registri dan ini stabil untuk saya:

[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 - harus dalam keadaan default direntang ke maksimum = 16777214 harus mencegah server melelahkan port sesaat.
  • TcpMaxDataRetransmissions - Batas waktu transmisi ulang segmen data TCP yang tidak diakui pada koneksi aktual = 5.

Hasilnya sama seperti milik Anda. Saya pikir Anda harus mempertimbangkan untuk mengaudit perilaku Anda terhadap kinerja aplikasi / skrip Anda. Jika semuanya baik-baik saja dan tidak ada yang membantu, maka Anda dapat mencoba meletakkan server proxy sebelum server aplikasi web Anda, buat 2 node dengan server web (IIS, Apache, ...) yang akan berbagi konten statis yang sama dan mengakses database yang sama pada saat yang sama waktu (jika Anda memiliki sumber daya yang cukup di perusahaan Anda).

Mungkin artikel ini akan membantu Anda dalam beberapa cara: http://blogs.technet.com/b/tristank/archive/2008/03/11/maxuserport-what-it-is-what-it-does-when-it- s-important.aspx

MyKE
sumber
1
Anda harus membaca pertanyaan dengan seksama sebelum menjawab. Tentu saja saya sudah mencoba solusi ini sebelum bertanya, itu sangat umum. Saya sudah memecahkan masalah dengan cara lain.
CamaroSS
1
Saya pikir setiap hari restart layanan surat tidak diselesaikan masalah. Sudahkah Anda menemukan solusi lain?
MyKE
3
@CamaroSS: Silakan bagikan solusi Anda (jika melampaui "memulai kembali layanan email" - ini bukan solusi). Juga, mungkin Anda harus lebih menghargainya jika seseorang mencoba membantu Anda.
Sven
@CamaroSS Dan jika Anda membaca carefuly jawaban saya Anda akan melihat "Dalam hasil yang sama seperti Anda", maka saya kirimkan informasi lain ..
Myke
1
Apakah pengaturan MaxUserPortmasih berfungsi di 2012? Saya pikir pada tahun 2012 Anda harus melakukannya melalui netsh. misal:netsh int ipv4 set dynamicport tcp start=25535 num=40000
rustyx
4

Selain pengaturan driver Tcpip, rentang port TCP sementara dikelola di Windows Server menggunakan perintah netsh ( sumber ).

Anda dapat melihat rentang port dinamis dengan perintah berikut:

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

Untuk mengubah rentang port, gunakan perintah ini:

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

Sebagai contoh:

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

Pengaturan (mulai = 49152 num = 16384 ) juga merupakan default pada Windows Server 2008 dan seterusnya.

rustyx
sumber
Terima kasih banyak untuk ini - Saya sudah menghabiskan waktu berjam-jam untuk mencoba menyelesaikan masalah saya. Semua saran yang bisa saya temukan adalah tentang menyesuaikan MaxUserPort dalam registri dan tidak ada yang menyebutkan netsh.
milosz
3

Memiliki masalah yang sama pada Windows Server 2016 ini menjalankan sejumlah besar tes Selenium menggunakan chromewebdriver. Skrip PS ini akan secara otomatis mengonfigurasi pengaturan @Myke yang dibagikan di atas. The shutdownperintah ditambahkan karena reboot diperlukan untuk perubahan TCP stack.

Meningkatkan Ukuran Pool untuk Ephemeral TCP Ports

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

Ini adalah pesan kesalahan yang kami terima saat Webdriver.Quit()memberi tahu kami bahwa alamat TCP sedang digunakan.

Kesalahan : EADDRINUSE menghubungkan EADDRINUSE 127.0.0.1:12843 di ClientRequest. (\ node_modules \ selenium-webdriver \ http \ index.js: 238: 15)
Dari : Tugas: WebDriver.quit ()

SliverNinja - MSFT
sumber
1

Sudahkah Anda memastikan bahwa Anda tidak membocorkan objek koneksi database? Anda harus menutup setiap koneksi basis data yang dibuka, baik secara eksplisit (dengan coba-akhirnya) atau dengan menggunakan {}. Ini adalah masalah umum yang ASP tidak akan langsung memberi tahu Anda.

James
sumber
Ini adalah sekelompok situs PHP, kebanyakan dari mereka berjalan melalui FastCGI menggunakan koneksi persisten, jadi seharusnya tidak demikian. Jika ya, maka penghitung sistem akan mengembalikan nilai yang jauh lebih tinggi. Saya juga tidak bisa menjelaskan mengapa localhost tiba-tiba berhenti untuk menyelesaikan ke :: 1 dan memutuskan ke 127.0.0.1 sebagai gantinya.
CamaroSS
2
:: 1 menghilang mungkin hanya efek samping dari meluapnya port yang diizinkan - Saya menduga bahwa windows mencoba ping IPv6 dan ketika tidak bisa mendapatkan port untuk melakukan upaya, ia kembali ke IPv4. PHP berada di luar bidang keahlian saya. :-(. Semoga beruntung!
James