Menjalankan lsof -saya menunjukkan banyak koneksi di CLOSE_WAIT? Haruskah saya khawatir

7

Jadi saya menjalankan lsof -i | wc -lsecara berkala dan memberi tahu saya bahwa dari 420 baris, antara 240 dan 255 dalam CLOSE_WAITkeadaan. Bagaimana koneksi TCP memasuki kondisi ini?

Haruskah saya khawatir dan bagaimana saya harus memecahkan masalah itu?

pengguna20414
sumber

Jawaban:

12

(Saya akan mengedit jawaban mikegrb, tetapi memutuskan saya terlalu banyak membantai)

CLOSE_WAIT sangat berarti persis seperti yang dikatakannya - kernel sedang menunggu proses lokal untuk menutup deskriptor file sebelum menghapus entri. Koneksi TCP telah sepenuhnya dihancurkan dan ujung yang jauh mungkin berada di bawah kesan bahwa koneksi tersebut adalah finito, tetapi ujung Anda memegang hal-hal.

Satu-satunya masalah adalah bahwa banyak entri CLOSE_WAIT mengkonsumsi memori kernel dan entri tabel deskriptor file, yang dapat menjadi masalah jika ada banyak tumpukan mereka. Jika entri Anda sedang melihat bersifat sementara, maka mungkin saja Anda sedang bersepeda melalui banyakkoneksi TCP, dan Anda melihat sebagian kecil dari mereka dalam jumlah kecil waktu antara ketika koneksi ditutup dan proses mendapatkan sekitar untuk menutup file descriptor. Di sisi lain, jika mereka permanen (port dan alamat IP tidak berubah dari waktu ke waktu) maka ada sesuatu yang bocor deskriptor dan perlu diperbaiki sehingga selalu menutup fds ketika selesai dengan mereka. Seperti yang dikatakan mikegrb, versi yang lebih baru mungkin sudah memperbaiki masalahnya, jadi pertanyaan pada milis yang relevan atau pemeriksaan changelogs mungkin diperlukan.

womble
sumber
Apakah koneksi TCP di CLOSE_WAIT menggunakan deskriptor file? Karena kemarin saya menerima masalah "Terlalu banyak file yang terbuka" pada Socket.
user20414
2
Ya, entri CLOSE_WAIT adalah deskriptor file terbuka.
womble
2

Keadaan CLOSE_WAIT berarti bahwa ujung yang lain mengirim segmen FIN untuk menutup koneksi. Koneksi masih semacam didirikan. Ini dalam mode yang Anda bisa anggap sebagai setengah dupleks, memungkinkan ujung ini untuk menyirami buffer, mengirimkan bit data terakhir ke ujung yang meminta koneksi ditutup sebelum menutup koneksi dari ujung ini.

Jika Anda memiliki banyak koneksi yang tetap di CLOSE_WAIT itu berarti proses yang bertanggung jawab tidak menutup soket setelah masuk ke CLOSE_WAIT. Anda bisa menggunakan tcpdump, atau alat tangkap lalu lintas jaringan lainnya, untuk melihat paket.

Lihat juga proses yang bertanggung jawab. Karena penasaran, apa proses yang bertanggung jawab? Ini mungkin memiliki versi tetap yang lebih baru tersedia atau mungkin sudah waktunya untuk mengajukan laporan bug;)

mikegrb
sumber
Apache Tomcat 5.5.27
user20414
0

jika Anda beroperasi di jaringan yang lemah, Anda dapat menyetel:

  • Jumlah maksimum deskriptor file melalui ulimitsdan melalui /proc(lebar sistem)
  • Anda dapat mempersingkat waktu tunggu TCP melalui /proc
jscott
sumber
0

Anda mungkin tidak menutup sumber daya (pegangan file, koneksi jaringan) di suatu tempat di aplikasi yang berjalan di server.

Michael Munsey
sumber