Tăng ulimit trên CentOS


18

Chúng tôi có một hộp CentOS mà tôi đang cố gắng tăng số lượng tệp tối đa mà người dùng có thể mở. Hiện tại khi tôi chạy ulimit -Sntôi nhận 1024ulimit -Hncho 4096. Tôi cần con số đó lên tới khoảng 6000.

Trong /etc/sysctl.conftôi đã thiết lập fs.file-max = 100000. Trong /etc/security/limits.conftôi có bộ sau:

username soft nofile 6000
username hard nofile 65535

Tôi đã đăng xuất và đăng nhập lại usernamenhưng vẫn không thấy những thay đổi của mình. Tôi cần gì để thay đổi giá trị này?

Tất cả tôi có /etc/security/limits.d90-nproc.conf. Tôi cũng đảm bảo rằng ulimit không được gọi trong .bash_profile hoặc .bashrc của tôi.

Khi tôi chạy, sysctl -pnó sẽ tạo ra các cài đặt tôi muốn và nó hiển thị giá trị fs.file-maxmà tôi muốn. Nhưng khi tôi chạy ulimit -Sn, tôi nhận được 1048. Nếu tôi cố chạy sysctl --systemtôi sẽ nhận được error: Unknown parameter "--system".


Bạn đã thử khởi động lại? Theo như tôi biết thì các cài đặt đó được đọc trong quá trình khởi động hệ thống.
Kamil

Bạn không cần khởi động lại cho điều đó.
Xavier Lucas

Câu trả lời:


14

Để buộc /etc/sysctl.confphải đọc lại chạy sysctl -p.

Tệp /etc/security/limits.confđược đọc bởi các vỏ đăng nhập và bạn nên đóng các cửa sổ phiên hoạt động nếu trong GUI. Đối với đăng nhập từ xa, nó có hiệu lực trên relog.


1
Ran mà, vẫn không thấy thay đổi sau một bản tin.
tubaguy50035

@ tubaguy50035 fs.file-maxlà số lượng tệp mở tối đa trên hệ thống. Đó là một giới hạn cứng và nó sẽ không được phản ánh bởi ulimitcác cuộc gọi trong trường hợp của bạn.
Xavier Lucas

Ờ được rồi. Tôi có nên chạy vào quá nhiều tập tin không?
tubaguy50035

@ tubaguy50035 Không liên quan. Đó là giới hạn cứng của hệ thống sẽ ghi đè bất kỳ số nào ở trên trong giới hạn. Nhưng giới hạn. Thông tin vẫn là những gì được áp dụng. Bạn có thể thử đặt giới hạn cứng & mềm với ulimit trực tiếp trong một phiên mới và xem liệu bạn có đạt được mức tối đa tương tự không? Một cái gì đó dường như ghi đè lên cấu hình của bạn.
Xavier Lucas

Nó nói hoạt động không được phép. Tôi có cần cung cấp cho người dùng quyền truy cập vào một cái gì đó? Tôi muốn người dùng web không có quyền root.
tubaguy50035

6

Như một poster khác đã nói, bạn cần phải có sysctl đặt giá trị trong kernel đang chạy. Có một số cách bạn có thể đặt giá trị mà không cần khởi động lại:

sysctl -p /etc/sysctl.conf
sysctl -w fs.file-max=100000
sysctl --system

IMHO phương pháp cuối cùng là phương pháp tốt nhất, vì nó sao chép thứ tự các cài đặt sẽ được áp dụng trong khi khởi động (và do đó nếu bạn có xung đột, nó sẽ trở nên rõ ràng).

Lưu ý: Tôi không chắc chắn bạn đang sử dụng phiên bản CentOS nào, nhưng ít nhất 7 ngày tôi đã gặp phải một vấn đề trong đó nếu dracut xây dựng lại initramfs vì bất kỳ lý do gì (chẳng hạn như khi cài đặt mô-đun hạt nhân mới), nó sẽ sao chép lại nội dung của /etc/sysctl.* vào initramfs, sau đó sẽ được systemd-sysctl thực thi trong giai đoạn đó, ngay cả khi sau đó bạn xóa những mục đó ra khỏi /etc/sysctl.conf.

Trong môi trường của tôi, tôi đã chỉnh sửa mô-đun dracut systemd để loại trừ /etc/sysctl.* khỏi môi trường đó (vì các cài đặt đó sẽ được đặt khi rootfs được gắn kết và systemd-sysctl chạy lại). Nó chỉ là một gotcha mà bạn có thể gặp phải.


Tôi đang dùng CentOS 6.5. Cũng cập nhật câu hỏi của tôi với kết quả của một số trong đó.
tubaguy50035
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.