Làm cách nào để định cấu hình giới hạn tệp mở của người dùng?


8

Giới hạn tệp mở mặc định cho mỗi quy trình là 1024 trên - giả sử - Linux. Đối với một số daemon này là không đủ. Vì vậy, câu hỏi: Làm thế nào để thay đổi giới hạn tệp mở cho một người dùng cụ thể?

Câu trả lời:


16

Trên Linux, bạn có thể định cấu hình qua limits.conf, ví dụ: qua

# cd /etc/security
# echo debian-transmission - nofile 8192 > limits.d/transmission.conf

(đặt cả giới hạn cứng và mềm cho các quy trình được bắt đầu trong quá trình truyền debian của người dùng thành 8192)

Bạn có thể xác minh thay đổi qua:

# sudo -u debian-transmission bash -c "ulimit -a"
[..]
open files                      (-n) 8192
[..]

Nếu một daemon đang chạy, nó phải được khởi động lại để giới hạn mới được chọn. Trong trường hợp trình nền được khởi động thủ công từ phiên người dùng, người dùng phải đăng nhập lại để có giới hạn mới.

Ngoài ra, bạn cũng có thể chỉ định các giới hạn bổ sung trực tiếp trong /etc/security/limits.conf, tất nhiên - nhưng tôi thích .dcách tiếp cận thư mục để duy trì tốt hơn.

Để thực thi các giới hạn mềm / cứng khác nhau, sử dụng hai mục, ví dụ:

debian-transmission soft nofile 4096
debian-transmission hard nofile 8192

(lý do đằng sau này: giá trị mềm được đặt sau khi người dùng đăng nhập nhưng quá trình người dùng được phép tăng giới hạn lên đến giới hạn cứng)

Các limits.conf/ limits.dcấu hình được sử dụng bởi pam_limits.so, được kích hoạt theo mặc định trên bản phân phối Linux hiện hành.

Liên quan

Ngoài ra còn có giới hạn toàn hệ thống trên Linux , /proc/sys/fs/file-max:

Tệp này xác định giới hạn toàn hệ thống về số lượng tệp đang mở cho tất cả các quy trình.

Ví dụ: mặc định trên Ubuntu 10.04:

$  cat /proc/sys/fs/file-max
786046

Tệp giả /proc/sys/fs/file-nrcung cấp thêm thông tin, ví dụ:

$ cat /proc/sys/fs/file-nr
1408    0   786046

số lượng tệp xử lý được phân bổ (nghĩa là số lượng tệp hiện được mở); số lượng tập tin xử lý miễn phí; và số lượng tệp xử lý tối đa

Do đó, một mặt, bạn cũng có thể phải điều chỉnh file-maxgiới hạn toàn hệ thống , trong trường hợp nó rất nhỏ và / hoặc hệ thống đã được tải rất nhiều. Mặt khác, chỉ tăng file-maxlà không đủ, vì nó không ảnh hưởng đến các giới hạn mềm / cứng được thi hành bởi cơ chế pam_limits.

Để thay đổi file-maxtrên dòng lệnh (không cần khởi động lại):

# sysctl -w fs.file-max=786046

Đối với thay đổi vĩnh viễn thêm fs.file-max=786046vào /etc/sysctl.confhoặc /etc/sysctl.d.

Giới hạn trên fs.file-maxđược ghi lại trong fs.nr_open. Ví dụ: (một lần nữa) trên Ubuntu 10.04:

$ sysctl -n fs.nr_open
1048576

(đó là 1024 * 1024)

Sysctl này cũng có thể cấu hình.


1
Cảm ơn bạn vì thông tin cuối cùng - Tôi đã gãi đầu cố gắng tìm ra lý do tại sao tôi không thể đặt giới hạn nofile của người dùng lớn hơn 1048576 trong /etc/security/limits.conf
Liczyrzepa 15/03/2017
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.