Saya memiliki hipotesis: kadang-kadang koneksi TCP tiba lebih cepat daripada server saya accept()
. Mereka mengantri sampai antrian meluap dan kemudian ada masalah.
Bagaimana saya bisa mengkonfirmasi ini terjadi?
Dapatkah saya memonitor panjang antrian penerimaan atau jumlah luapan? Apakah ada penghitung yang terbuka di suatu tempat?
netstat
hanya menunjukkan panjang antrian kirim dan terima, yang tidak sama dengan antrian accept.
man netstat | less +/Flags
netstat
tampaknya tidak muncul Flags
sama sekali untuk koneksi TCP. Dari sedikit pengujian, sepertinya koneksi ditampilkan sebagai ESTABLISHED
di netstat
, bahkan jika saya mencoba membuka koneksi ke sebuah proses yang tidak listen()
tetapi tidak pernah accept()
.
SYN_RECV
. Tidak ada antrian lain selain itu. Saya kira kernel bisa dikatakan entah bagaimana untuk login paket yang jatuh karena terlalu banyak koneksi setengah terbuka, tetapi sudah ada 10+ tahun sejak saya melihat jaringan dengan Linux, jadi saya tidak tahu bagaimana melakukan itu. Di samping catatan: Anda tidak menunggu untuk accept()
melakukan tugasnya, Anda menunggu untuk ACK
tiba dari penghubung penghubung untuk menyelesaikan koneksi.
netstat
.