Tại sao file-nr và lsof tính trên các tệp đang mở khác nhau? [đóng cửa]


19

Tôi đang gặp phải một vấn đề bất ngờ; tất cả các ứng dụng của tôi và máy chủ đều chạy tốt và đột nhiên tôi thấy số lượng tệp đang mở tăng lên.

Tôi đang kiểm tra nó bằng lệnh này:

cat /proc/sys/fs/file-nr

Khi tôi kiểm tra với nó, nó hiển thị 44544 0 128000, vì vậy, 44044 là số lượng tệp đang mở.

Nhưng khi tôi kiểm tra với lệnh này - lsof | wc -l nó hiển thị - 28384.

Vậy cái nào đúng?

Giới hạn tệp mở tối đa của tôi là 65535

ulimit -a
open files                      (-n) 65535

Tôi muốn biết 5 quy trình hàng đầu đang sử dụng các tệp mở hơn. Tôi có thể lấy cái này từ lsofnhưng số đếm hiển thị ở đây rất khác so với lệnh khác mà tôi đã đề cập ở trên.

Tôi có thể lấy chi tiết về các quy trình được tính bằng lệnh này cat /proc/sys/fs/file-nrkhông?

Theo liên kết được đề cập dưới đây, chúng tôi nói rằng chúng tôi không thể, Cách hiển thị mô tả tệp đang mở nhưng không sử dụng lệnh lsof

Có một công việc xung quanh cho tôi? Tôi cần tìm quá trình bắt đầu sử dụng nhiều tệp đang mở đột ngột.

CẬP NHẬT Xin lỗi các bạn cho những rắc rối. Tôi đã tìm thấy lỗi mà tôi đang làm Tôi KHÔNG kiểm tra lsof | wc -l từ root. đó là lý do tôi đã thấy một sự khác biệt rất lớn

vẫn có sự khác biệt giữa đầu ra của tệp -nr và lsof | wc -l (từ gốc). số lsof nhiều hơn số tập tin -nr. Lý do cho điều này là, tập tin -nr bỏ qua một số thư mục (được coi là tập tin của lsof) tôi tìm thấy lý do này bởi một nghiên cứu litle trên chính google. Dù sao đi nữa! Cảm ơn các bạn vì tất cả sự giúp đỡ!



lsof | wc -l thực sự hiển thị một số âm?
Joe Sewell

3
Đó không phải là một dấu hiệu tiêu cực, đó là một dấu gạch nối!
Vasanth Nag KV

Câu trả lời:


8

Dường như có hai câu hỏi trong trò chơi ở đây. Đầu tiên, có thể tìm thấy tài liệu đầy đủ về cấu trúc file-nr và file-max tại

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

Điều này xác định các trường trong tệp đó là:

Ba giá trị trong tệp-nr biểu thị số lượng xử lý tệp được phân bổ, số lượng xử lý tệp được phân bổ nhưng không sử dụng và số lượng xử lý tệp tối đa. Linux 2.6 luôn báo cáo 0 là số lượng xử lý tệp miễn phí - đây không phải là lỗi, điều đó chỉ có nghĩa là số lượng xử lý tệp được phân bổ chính xác khớp với số lượng xử lý tệp được sử dụng.

Hy vọng rằng điều đó đủ rõ ràng. Câu hỏi thứ hai đã được trả lời trong chuỗi được đề cập ở trên ( /server/485262/number-of-file-descriptors-different-b between-proc-sys-fs-file-nr-and-proc- pi ) và dường như chuyển sang một trong hai

  1. "sử dụng lsof" và lọc đầu ra một cách thích hợp nếu bạn cần lấy xấp xỉ tốt các mô tả tệp được sử dụng bởi một quy trình hoặc,
  2. đi qua hệ thống tập tin / Proc (và vẫn phải lọc đầu ra) để có được một ảnh chụp nhanh trong thời gian sử dụng bộ mô tả tập tin.

Khó khăn trong việc đạt được các số liệu chính xác cho điều này là rất đáng kể, vì số lượng FD được sử dụng tại bất kỳ điểm nào có thể dao động rất nhanh trên một hệ thống.

Chuỗi sau đây gợi ý sơ đồ lọc cho phương pháp 'lsof':

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


cập nhật câu hỏi của tôi nhưng cảm ơn cho tất cả các thông tin trên đó.
Vasanth Nag KV

Nhưng làm thế nào là có thể, hơn là ulimitđối với tôi nói rằng tôi có thể mở tối đa 1024 tệp, nếu lsof | wc -lnói tôi đã có 1545 rồi?
Nakilon

Xin vui lòng đọc các trang hướng dẫn trên lsofulimitcho câu trả lời cho câu hỏi của bạn.
Thomas N
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.