Điều quan trọng cần biết là có hai loại giới hạn:
- Một giới hạn cứng chỉ có thể cấu hình bằng root. Đây là giá trị cao nhất có thể (giới hạn) cho giới hạn mềm.
- Một giới hạn mềm có thể được thiết lập bởi một người dùng bình thường. Đây là giới hạn thực tế có hiệu lực.
Giải pháp cho một phiên duy nhất
Trong vỏ đặt giới hạn mềm:
ulimit -Sn 2048
Ví dụ này sẽ tăng giới hạn thực tế lên 2048 nhưng lệnh sẽ chỉ thành công nếu giới hạn cứng (kiểm tra ulimit -Hn
:) giống hoặc cao hơn. Nếu bạn cần giá trị cao hơn, hãy tăng giới hạn cứng bằng một trong các phương pháp dưới đây. Các giới hạn được đặt cho mỗi quy trình và chúng được kế thừa bởi các quy trình mới được sinh ra, do đó, bất cứ điều gì bạn chạy sau lệnh này trong cùng một trình bao sẽ có các giới hạn mới.
Thay đổi giới hạn cứng trong một phiên duy nhất
Điều này không dễ dàng vì chỉ root mới có thể thay đổi giới hạn cứng và sau khi chuyển sang root bạn phải chuyển về người dùng ban đầu. Đây là giải pháp với sudo
:
sudo sh -c "ulimit -Hn 9000 ; exec su \"$USER\""
Giải pháp toàn hệ thống
Trong Debian và nhiều hệ thống khác sử dụng, pam_limits
bạn có thể đặt giới hạn cho toàn hệ thống trong /etc/security/limits.conf
và trong các tệp trong /etc/security/limits.d
. Các tập tin conf chứa mô tả. Dòng ví dụ:
@webadmins hard nofile 16384
@webadmins soft nofile 8192
Điều này sẽ đặt giới hạn cứng và giới hạn mềm mặc định cho người dùng trong nhóm webadmins
sau khi đăng nhập.
Các giới hạn khác
Giá trị giới hạn cứng bị giới hạn bởi giới hạn toàn cầu của giá trị mô tả tệp mở trong /proc/sys/fs/file-max
đó khá cao theo mặc định trong các bản phân phối Linux hiện đại. Giá trị này được giới hạn bởi NR_OPEN
giá trị được sử dụng trong quá trình biên dịch kernel.
Có giải pháp nào tốt hơn không?
Có lẽ bạn có thể kiểm tra xem tất cả các *log
tệp bạn cung cấp có phải tail -f
là các tệp thực sự hoạt động cần được theo dõi hay không. Có thể một số trong số chúng đã bị đóng để đăng nhập và bạn chỉ có thể mở một số lượng tệp nhỏ hơn.