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

Buku Putih Lag Game › L7 OS server (kernel)

Batas file descriptor File descriptor limit (ulimit)

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

Buka kartu interaktif dengan gambar dan simulasi →

Setiap koneksi membutuhkan satu file descriptor (fd, nomor yang diberikan OS untuk file dan socket yang terbuka), dan jumlah fd yang bisa dibuka oleh satu proses dibatasi.

Mengapa Jumlah pemain online bersamaan mencapai batas file descriptor proses → Akibatnya Server tidak bisa menerima koneksi baru (Too many open files). Membuka file log dan koneksi DB juga ikut gagal → Di layar Begitu jumlah pemain mencapai angka tertentu, tidak ada lagi yang bisa masuk: pemain baru gagal masuk atau terjebak loading tanpa henti

Gejala
Tidak bisa masuk / loading tanpa henti
Faktor
Packet loss
Siapa yang mengalami
Seluruh server
Kapan
Tepat setelah login atau maintenance, Saat banyak pemain berkumpul
Penanggung jawab
Penanggung jawab utama Infrastruktur server (Tim Infrastruktur) · Turut terlibat Pengembangan server (Tim Pengembang Game)
Tugas Tim Pengembang Game
Tutup socket dengan pasti saat koneksi diakhiri (mencegah kebocoran fd), jika accept gagal dengan EMFILE (fd habis) hentikan sementara penerimaan koneksi atau terima koneksi dengan fd cadangan yang sudah disisihkan lalu langsung tutup (agar CPU tidak terbuang untuk memproses notifikasi koneksi yang sama berulang-ulang).
Tugas Tim Infrastruktur
Periksa ulimit dan konfigurasi service (LimitNOFILE di systemd), pasang alert saat mendekati batas.
Kisaran angka
Di Linux, jika service tidak dikonfigurasi khusus, batasnya masih sering 1.024. Server game biasanya menaikkannya ke puluhan ribu hingga ratusan ribu. Windows tidak punya batas default serendah ini.
Di grafik
Mendatar di batas · Jumlah fd terbuka pada proses, jumlah koneksi bersamaan
Yang diperiksa
Periksa fd-nr (jumlah file descriptor yang terbuka) proses server game dengan pidstat -v dan batas jumlah file terbuka di /proc/PID/limits, lalu cari kegagalan accept (EMFILE, Too many open files) di log server
Cocok jika
Jumlah fd mendatar di nilai batas, dan sejak saat itu accept gagal dengan EMFILE
Tidak cocok jika
Jumlah fd masih jauh di bawah batas: bukan penyebab ini. Permintaan koneksi dibuang di kernel: lebih mungkin “Antrean koneksi (backlog) meluap”. Masalahnya di connection tracking: lebih mungkin “Tabel conntrack server penuh”
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)
Pelajari lebih lanjut
Koneksi yang tidak diterima tetap tertinggal di antrean koneksi (backlog) kernel. Akibatnya, tergantung kodenya, server bisa terus menerima notifikasi “ada koneksi baru” dan membuang-buang CPU.

Sumber

  1. systemd-system.conf(5) — Linux manual page systemd
    Nilai default DefaultLimitNOFILE untuk service adalah 1024:524288 (soft limit 1.024)
  2. accept(2) — Linux manual page Linux man-pages
    Saat batas fd proses tercapai, accept gagal dengan EMFILE
  3. Maximum Number of Sockets Supported Microsoft
    Winsock di Windows membatasi jumlah socket hanya berdasarkan memori yang tersedia
  4. pidstat(1) — Linux manual page sysstat
    fd-nr pada -v: jumlah file descriptor yang dibuka proses
  5. proc_pid_limits(5) — Linux manual page Linux man-pages
    /proc/PID/limits berisi nilai soft dan hard batas sumber daya per proses

Lihat juga

Lapisan yang sama: L7 OS server (kernel)

Penyebab di lapisan lain dengan gejala yang sama (Tidak bisa masuk / loading tanpa henti)

Lihat kartu interaktif dengan gambar dan simulasi