Không thể tăng giới hạn tệp mở quá 4096 (Ubuntu)


34

Tôi đang dùng Ubuntu 17.04. Cố gắng tăng giới hạn tệp đang mở và không có hướng dẫn nào tôi tìm thấy trực tuyến đang hoạt động. Tôi có thể lên tới 4096, nhưng không thể vượt qua điều đó.

$ ulimit -n
1024
$ ulimit -n 4096
$ ulimit -n
4096

Điều đó làm việc. Đây không phải là:

$ ulimit -n 4097
bash: ulimit: open files: cannot modify limit: Operation not permitted

Có vẻ là do giới hạn cứng:

$ ulimit -Hn
4096

Tôi đã thử thêm các dòng này vào /etc/security/limits.conf:

*                hard    nofile          65535
*                soft    nofile          65535
root             soft    nofile          65535
root             hard    nofile          65535

Đồng thời thêm dòng này vào /etc/pam.d/common-session và /etc/pam.d/common-session-noninteractive:

session required pam_limits.so

Kể từ khi làm điều đó, tôi đã khởi động lại máy tính của mình. Thay đổi về giới hạn. Có vẻ như không ảnh hưởng đến bất cứ điều gì. Giới hạn cứng vẫn bị kẹt ở 4096, khiến tôi không thể đi cao hơn nữa. Làm cách nào để tăng giới hạn tệp đang mở?


Dưới đây là một số thông tin cấu hình bổ sung:

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

Câu trả lời:


56

OK, cuối cùng tôi đã tìm ra điều này. Các giới hạn tôi đã đặt trong /etc/security/limits.conf đang được áp dụng, nhưng chúng không được áp dụng cho đăng nhập đồ họa. Điều này có thể được xác minh như thế này từ một cửa sổ đầu cuối:

$ ulimit -n
4096
$ su mkasberg
Password:
$ ulimit -n
65535

Nhiều nghiên cứu đã đưa tôi đến báo cáo lỗi này , điều này khiến tôi chỉ ra đúng hướng. Để sửa đổi giới hạn được sử dụng bởi shell đăng nhập, chúng ta cần thêm dòng sau vào /etc/systemd/user.conf:

DefaultLimitNOFILE=65535

Sự thay đổi đó hoạt động, nhưng chỉ ảnh hưởng đến giới hạn mềm. (Để chúng tôi giới hạn với giới hạn cứng là 4096 vẫn còn.) Để ảnh hưởng đến giới hạn cứng, chúng tôi phải sửa đổi /etc/systemd/system.conf với cùng một thay đổi.

Những thay đổi tôi đã thực hiện trong /etc/pam.d là không cần thiết. Ít nhất là trên Ubuntu, điều này đã hoạt động. Ngoài ra, không cần thiết phải thay đổi cài đặt cho root*trong giới hạn. Thay đổi giới hạn cho mkasberglà đủ, ít nhất là cho trường hợp sử dụng của tôi.


Tóm tắt

Nếu bạn muốn tăng giới hạn được hiển thị bởi ulimit -n, bạn nên:

  • Sửa đổi /etc/systemd/user.conf và /etc/systemd/system.conf bằng dòng sau (việc này sẽ đảm nhiệm việc đăng nhập đồ họa):

    DefaultLimitNOFILE=65535
    
  • Sửa đổi /etc/security/limits.conf bằng các dòng sau (việc này sẽ đảm nhiệm việc đăng nhập không phải GUI):

    mkasberg hard nofile 65535
    mkasberg soft nofile 65535
    
  • Khởi động lại máy tính của bạn để thay đổi có hiệu lực.


2
DefaultLimitNOFILE=65535đã lừa Nhưng tại sao nó /etc/security/limits.conf không hoạt động?
Suvitruf nói Phục hồi lại

6
Đăng nhập GUI sử dụng systemd, dường như có cấu hình riêng ( /etc/systemd/system.conf) độc lập với cấu hình thông thường cho các phiên cuối ( /etc/security/limits.conf). Tôi không biết đủ về systemd để biết tại sao nó được thực hiện theo cách này.
mkasberg

1
@Suvitruf vì nó bị bỏ qua trong một hệ thống systemd . Tôi đang đăng một câu trả lời.
Marc.2377

1
Chỉ muốn chỉ ra rằng các giới hạn cho rootngười dùng không thể được chỉ định bởi *hoặc chỉ định nhóm. rootnghĩa đen phải được chỉ định rõ ràng.
Petr Javorik

2
Điều này làm việc cho tôi, sau khi khởi động lại .
Shihe Zhang

14

Không cần thay đổi bất cứ điều gì trong /etc/security/limits.conftập tin, nó sẽ bị bỏ qua nếu bạn đang sử dụng systemd.

(sao chép câu trả lời đã sửa đổi cho câu hỏi khác trên mạng ...)

Một thay thế cho những người không muốn chỉnh sửa mặc định /etc/systemd/system.conf/etc/systemd/user/confcác tập tin:

  1. tạo một tệp mới /etc/systemd/system.conf.d/limits.confvới các nội dung sau:

    [Manager]
    DefaultLimitNOFILE=65535
    
  2. chạy systemctl daemon-reexecnhư root

  3. đăng xuất và đăng nhập lại

  4. kiểm tra giới hạn mới của bạn với ulimit -n.

Tham khảo systemd-system.conftrang hướng dẫn để biết chi tiết.


Trên hệ thống Ubuntu 18.10 của tôi, tập tin được đề cập là /etc/systemd/system.conf. Thực hiện thay đổi ở đó dường như đã thực hiện các mẹo, cảm ơn bạn.
Stephen Kennedy

1
Chỉ cần đăng xuất đối với tôi không hoạt động (Ubuntu 18.04) nhưng khởi động lại đã thực hiện công việc. Giải pháp rất thanh lịch, cảm ơn.
stann1

0

Sử dụng Ubuntu 17.04 tôi đã nhận được giới hạn cứng được mô tả:

user@paresh.com:~$ ulimit -Hn
4096

Tôi có thể hạ thấp nó bằng cách sử dụng ulimit, nhưng không tăng nó, giống như câu hỏi mô tả nó. ulimithướng dẫn mô tả:

chỉ root mới có thể tăng giới hạn cứng.

Vì vậy, tôi đã cố gắng đặt giới hạn cao hơn /etc/security/limits.confnhư thế này:

user hard nofile 9999

và đăng nhập mới như ssh localhost -l userđã cho tôi giới hạn mới:

user@paresh.com:~$ ulimit -Hn
9999

Tôi hy vọng điều này làm việc cho bạn quá.


0
  1. chỉnh sửa /etc/systemd/system/sonar.service

  2. thêm hai dòng này dưới Dịch vụ

[Dịch vụ]

Giới hạnMEMLOCK = vô cùng

Giới hạnNOFILE = 65535

  1. systemctl daemon-tải lại
  2. hệ thống khởi động lại sonar

cái này hiệu quả với tôi


0

TL; DR Tôi cảm thấy cần phải tập trung các câu trả lời, vì vậy chúng dễ tìm hơn. Mất nhiều thời gian để tập hợp tất cả các mảnh lại với nhau để khiến nó hoạt động chính xác ...

Có 2 địa điểm được xem xét.

  1. Phiên GUI

    $ grep DefaultLimitNOFILE /etc/systemd/system.conf
    DefaultLimitNOFILE=65535
    

    hoặc tốt hơn ở đây:

    $ grep NOFILE /etc/systemd/system.conf.d/limits.conf
    DefaultLimitNOFILE=65535
    
  2. môi trường vỏ

    $ grep nofile /etc/security/limits.conf
    user soft nofile 65535
    user hard nofile 65535`
    

    hoặc tốt hơn ở đây:

    $ grep nofile /etc/security/limits.d/user.conf
    user soft nofile 65535
    user hard nofile 65535
    
  3. Sau khi thay đổi cài đặt trong các tệp trên, hãy khởi động lại và sau đó kiểm tra giới hạn với: ulimit -n -Hn -Sn

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.