한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Buku Putih Lag Game › L7 OS server (kernel)

Port ephemeral habis pada koneksi antarserver Ephemeral port exhaustion (TIME_WAIT)

ID penyebab so-ports · Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Infrastruktur server (Tim Infrastruktur)

Buka kartu interaktif dengan gambar dan simulasi →

Jika server game sering membuka dan menutup koneksi singkat ke DB atau server lain, koneksi yang sudah ditutup tetap menahan port untuk sementara sehingga koneksi baru tidak bisa dibuka.

Mengapa Koneksi baru dibuka dan ditutup untuk setiap permintaan → Akibatnya Pihak yang menutup koneksi lebih dulu menahan port selama sekitar 60 detik (Linux) dalam status TIME_WAIT, sehingga port yang bisa dipakai habis → Di layar Permintaan internal gagal, sehingga penyimpanan data gagal dan fitur mengalami error

Gejala
Aksi hilang / rollback, Tidak bisa masuk / loading tanpa henti
Faktor
Packet loss
Siapa yang mengalami
Seluruh server, Fitur tertentu saja
Kapan
Saat banyak pemain berkumpul
Penanggung jawab
Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Infrastruktur server (Tim Infrastruktur)
Tugas Tim Pengembang Game
Pakai ulang koneksi (connection pool), jangan membuka dan menutup koneksi baru untuk setiap permintaan.
Tugas Tim Infrastruktur
Perluas rentang port (ip_local_port_range), pertimbangkan pemakaian ulang TIME_WAIT untuk koneksi keluar (tcp_tw_reuse di Linux), pantau jumlah TIME_WAIT.
Kisaran angka
Rentang port default Linux (32768–60999) berisi sekitar 28.000 port. Jika koneksi baru ke alamat tujuan yang sama dibuat lebih dari 470 kali per detik, port akan habis. Windows punya sekitar 16.000 port default (49152–65535) dan TIME_WAIT-nya juga lebih lama, sehingga lebih cepat habis.
Di grafik
Mendatar di batas · Jumlah socket TIME_WAIT, jumlah kegagalan koneksi internal
Yang diperiksa
Hitung socket TIME_WAIT per alamat tujuan dengan ss -tan state time-wait, lalu cari kegagalan connect (EADDRNOTAVAIL) di log server game
Cocok jika
TIME_WAIT ke tujuan yang sama (misalnya DB) mendatar di dekat batas rentang port ephemeral (default sekitar 28.000), dan connect gagal dengan EADDRNOTAVAIL
Tidak cocok jika
TIME_WAIT sedikit tetapi hanya koneksi keluar yang gagal: lebih mungkin “Batas koneksi dan port NAT gateway cloud”
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)
Pelajari lebih lanjut
TIME_WAIT 60 detik di Linux adalah nilai tetap di kernel. Menurunkan tcp_fin_timeout, yang namanya mirip, tidak memperpendek TIME_WAIT.

Sumber

  1. IP Sysctl Linux kernel
    ip_local_port_range default 32768–60999, tcp_tw_reuse, tcp_fin_timeout adalah lama status FIN_WAIT_2 dipertahankan
  2. include/net/tcp.h (Linux v6.12) Linux kernel
    TCP_TIMEWAIT_LEN(60*HZ): TIME_WAIT sekitar 60 detik adalah konstanta kernel
  3. TCP/IP port exhaustion troubleshooting Microsoft
    Port dinamis Windows default 49152–65535; koneksi yang sudah ditutup menahan port dalam status TIME_WAIT selama 4 menit secara default
  4. ss(8) — Linux manual page iproute2
    Filter status state time-wait hanya menampilkan socket TIME_WAIT
  5. connect(2) — Linux manual page Linux man-pages
    EADDRNOTAVAIL: koneksi tidak bisa dibuka karena semua port di rentang port ephemeral sedang dipakai

Lihat juga

Lapisan yang sama: L7 OS server (kernel)

Penyebab di lapisan lain dengan gejala yang sama (Aksi hilang / rollback)

Lihat kartu interaktif dengan gambar dan simulasi