Chúng tôi chạy một cụm Apache Cassandra trong đó mỗi máy chủ có vài trăm nghìn tệp được mở tại bất kỳ thời điểm nào.
Chúng tôi muốn có thể nhận được số lượng tệp đang mở theo chu kỳ và đưa số này vào than chì , nhưng khi chúng tôi chạy lsof
theo collectd
, cuối cùng phải mất vài phút để hoàn thành và nhai một lượng CPU không phù hợp trong thời gian đó .
Tôi đang tự hỏi liệu có một phương tiện thay thế và thân thiện hơn để nhận cùng một dữ liệu mà lsof cung cấp hay thậm chí là một cách chạy lsof không ăn vào CPU một cách đáng chú ý? (Mặc dù tôi cho rằng phương pháp sau này có thể sẽ mất nhiều thời gian hơn để hoàn thành so với hiện tại ... không lý tưởng).
Có lẽ kernel duy trì một số biến ở đâu đó có chứa số lượng tệp đang mở? Suy nghĩ viển vông?
Cập nhật:
Để trả lời một trong những câu trả lời, chúng tôi đã sử dụng -b
và -n
cờ. Đây là lệnh đầy đủ khi tôi chạy nó collectd
:
sudo lsof -b -n -w | stdbuf -i0 -o0 -e0 wc -l
/proc/{{number}}/fd/5': No such file or directory find:
/ Proc / {{number}} / fdinfo / 5 ': Không có tệp hoặc thư mục như vậy - Q @ Benoît làm cách nào để tránh điều đó?