Giới hạn về số lượng mô tả tập tin


34

Tôi đang cố gắng cài đặt 389-ds, và nó đưa ra cảnh báo này:

WARNING: There are only 1024 file descriptors (hard limit) available, which limit the number of simultaneous connections.

Tôi hiểu về mô tả tệp, nhưng tôi không hiểu về giới hạn mềm và cứng.

Khi tôi chạy cat /proc/sys/fs/file-max, tôi trở lại 590432. Điều này có nghĩa là tôi có thể mở tối đa 590432 tệp (tức là có tối đa 590432 mô tả tệp.

Nhưng khi tôi chạy ulimit, nó cho tôi kết quả khác nhau:

$ ulimit
unlimited

$ ulimit -Hn    # Hard limit
4096

$ ulimit -Sn    # Soft limit
1024

Nhưng giới hạn cứng / mềm là gì ulimitvà chúng liên quan đến số được lưu trữ /proc/sys/fs/file-maxnhư thế nào?

Câu trả lời:


39

Theo tài liệu kernel , /proc/sys/file-maxlà số mô tả tập tin tối đa, tổng, toàn cầu mà kernel sẽ phân bổ trước khi bị nghẹt. Đây là giới hạn của kernel, không phải người dùng hiện tại của bạn. Vì vậy, bạn có thể mở 590432, miễn là bạn ở một mình trên một hệ thống nhàn rỗi (chế độ một người dùng, không có trình tiện ích nào đang chạy).

Lưu ý rằng tài liệu đã hết hạn: tệp đã được sử proc/sys/fs/file-maxdụng trong một thời gian dài. Cảm ơn Martin Jambon đã chỉ ra điều này.

Sự khác biệt giữa giới hạn mềm và cứng được trả lời ở đây, trên SE . Bạn có thể tăng hoặc giảm giới hạn mềm như một người dùng thông thường, miễn là bạn không vượt qua giới hạn cứng. Bạn cũng có thể hạ thấp giới hạn cứng (nhưng bạn không thể tăng lại giới hạn cho quy trình đó). Là siêu người dùng, bạn có thể tăng và giảm cả giới hạn cứng và mềm. Lược đồ giới hạn kép được sử dụng để thực thi các chính sách hệ thống, nhưng cũng cho phép người dùng thông thường đặt giới hạn tạm thời cho chính họ và sau đó thay đổi chúng.

Lưu ý rằng nếu bạn cố gắng hạ thấp giới hạn cứng dưới giới hạn mềm (và bạn không phải là siêu người dùng), bạn sẽ EINVALquay lại (Đối số không hợp lệ).

Vì vậy, trong trường hợp cụ thể của bạn, ulimit(giống như ulimit -Sf) nói rằng bạn không có giới hạn mềm đối với kích thước của các tệp được viết bởi trình bao và các quy trình con của nó . (đó có lẽ là một ý tưởng tốt trong hầu hết các trường hợp)

Gọi khác của bạn, ulimit -Hnbáo cáo tình hình -ngiới hạn (số lượng tối đa của file descriptor mở), không những -fgiới hạn, đó là lý do giới hạn mềm dường như cao hơn giới hạn cứng. Nếu bạn nhập, ulimit -Hfbạn cũng sẽ nhận được 'không giới hạn'.


14
Trên Linux 4.4.0, đường dẫn tối đa của tệp là /proc/sys/fs/file-max.
Martin Jambon

xin vui lòng giới hạn cứng ulimit -Hn nhắm mục tiêu giới hạn rất lớn của hệ thống để phân bổ khả năng mô tả tập tin?
Nữ web

2
@Webman: không, không. ulimitchỉ ảnh hưởng đến các giới hạn cho quy trình hiện tại . Các giới hạn của quy trình hiện tại cũng được để lại cho các quy trình con, nhưng mỗi quy trình có một số lượng riêng. Ví dụ với ulimit -Hn 10, bạn chỉ có thể mở 10 mô tả tệp bất kỳ lúc nào. Mỗi tiến trình con bạn tạo chỉ có thể có tối đa 10 mô tả tệp. Chỉ siêu người dùng có thể tăng giới hạn một lần được đặt. Nếu bạn đặt quá thấp, tùy chọn duy nhất của bạn có thể là giết tiến trình shell của bạn và bắt đầu một quy trình mới.
Alexios

0

Cuộc gọi hệ thống "chọn" là một trong nhiều quyết định thiết kế chết não khủng khiếp của unix khiến cho ngay cả windows95 vẫn trông rất tốt khi so sánh.

Đáng lẽ nó đã bị cấm 20 năm trước và bây giờ chúng ta có thể có khả năng xử lý tệp không giới hạn mà không gặp vấn đề gì.

Bạn có thể dễ dàng tăng số lượng bộ mô tả tệp với cấu hình kernel và ulimit NHƯNG hãy nhớ rằng nếu bất kỳ thư viện nào sử dụng hệ thống "chọn", chương trình của bạn sẽ trở nên không ổn định (hỏng bộ nhớ) và thất bại.

Chọn chỉ có thể xử lý các bộ mô tả tệp từ 0 đến 1023 và nếu bạn cung cấp một bộ có giá trị cao hơn, nó sẽ chọc ngẫu nhiên vào bộ nhớ của bạn và bộ chọn sẽ không bao giờ lặp lại bộ mô tả hoạt động. Thật không may, nhiều thư viện sử dụng chọn.


Nhận xét của bạn là một cảnh báo hữu ích, nhưng thay vì sử dụng giọng điệu hay, nó sẽ hữu ích hơn nhiều khi trích dẫn fd_set(3)trang người đàn ông và giới hạn đó xuất phát FD_SETSIZE. Và điều tốt nhất sẽ là một gợi ý về một cuộc gọi thay thế poll(3)như trong câu trả lời
Davor Cubranic
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.