Mengapa file-nr dan lsof mengandalkan file yang terbuka berbeda? [Tutup]

19

Tiba-tiba saya mengalami masalah; semua aplikasi saya dan server berjalan dengan baik dan tiba-tiba saya melihat jumlah file yang terbuka naik.

Saya memeriksanya dengan perintah ini:

cat /proc/sys/fs/file-nr

Ketika saya memeriksa dengan ini itu menunjukkan 44544 0 128000, jadi 44544 adalah jumlah file yang terbuka.

Tetapi ketika saya memeriksa dengan perintah ini - lsof | wc -l itu menunjukkan - 28384.

Jadi yang mana yang benar?

Batas maksimum file terbuka saya adalah 65535

ulimit -a
open files                      (-n) 65535

Saya ingin tahu 5 proses teratas yang menggunakan lebih banyak file terbuka. Saya bisa mendapatkan ini dari lsoftetapi jumlah yang ditampilkan di sini sangat berbeda dari perintah lain yang saya sebutkan di atas.

Bisakah saya mendapatkan rincian proses yang dihitung oleh perintah ini cat /proc/sys/fs/file-nr?

Menurut tautan yang disebutkan di bawah ini mengatakan kita tidak bisa, Bagaimana menampilkan deskriptor file yang terbuka tetapi tidak menggunakan perintah lsof

Apakah ada pekerjaan untuk saya? Saya perlu menemukan proses mana yang mulai menggunakan lebih banyak file terbuka secara tiba-tiba.

UPDATE Maaf guys untuk masalah ini. Saya menemukan kesalahan yang saya lakukan saya TIDAK memeriksa lsof | wc -l dari root. itulah alasan saya melihat perbedaan besar.

masih ada perbedaan antara output file -nr dan lsof | wc -l (dari root). Jumlah ini lebih dari jumlah file -nr. alasan untuk ini adalah, file -nr mengabaikan beberapa direktori (yang dianggap sebagai file oleh lsof) saya menemukan alasan ini oleh penelitian litle di google sendiri. bagaimanapun! terima kasih kawan atas semua bantuannya!

Vasanth Nag KV
sumber
Apakah lsof | wc -l benar - benar menunjukkan angka negatif?
Joe Sewell
3
itu bukan pertanda negatif, itu tanda hubung!
Vasanth Nag KV

Jawaban:

8

Tampaknya ada dua pertanyaan yang dimainkan di sini. Pertama, dokumentasi lengkap dari struktur file-nr dan file-max dapat ditemukan di

https://www.kernel.org/doc/Documentation/sysctl/fs.txt

Ini mendefinisikan bidang dalam file itu sebagai:

Tiga nilai dalam file-nr menunjukkan jumlah menangani file yang dialokasikan, jumlah menangani file yang dialokasikan tetapi tidak digunakan, dan jumlah maksimum menangani file. Linux 2.6 selalu melaporkan 0 karena jumlah file menangani gratis - ini bukan kesalahan, itu hanya berarti bahwa jumlah file yang dialokasikan benar-benar cocok dengan jumlah file yang digunakan.

Semoga itu cukup jelas. Pertanyaan kedua telah dijawab di utas yang disebutkan di atas ( /server/485262/number-of-file-descriptors-different-between-proc-sys-fs-fs-fr-nr-and-proc- pi ) dan tampaknya beralih ke keduanya

  1. "gunakan lsof" dan filter output dengan tepat jika Anda perlu mendapatkan perkiraan yang baik dari deskriptor file yang digunakan oleh suatu proses atau,
  2. lintasi sistem file / proc (dan masih harus memfilter output) untuk mendapatkan snapshot pada saat penggunaan deskriptor file.

Kesulitan untuk mendapatkan metrik yang akurat untuk ini adalah signifikan, karena jumlah FD yang digunakan pada titik tertentu dapat berfluktuasi sangat cepat pada suatu sistem.

Utas berikut menyarankan skema penyaringan untuk pendekatan 'lsof':

/server/396872/why-or-how-does-the-number-of-open-file-descriptors-in-use-by-root-exceed-ulim

Thomas N
sumber
memperbarui pertanyaanku. tapi terima kasih untuk semua informasinya di sana.
Vasanth Nag KV
Tetapi bagaimana mungkin, daripada ulimitbagi saya mengatakan saya bisa membuka 1024 file, jika lsof | wc -lmengatakan saya sudah memiliki 1.545?
Nakilon
Silakan baca halaman manual lsofdan ulimituntuk jawaban atas pertanyaan Anda.
Thomas N