Tại sao nó không thể vượt qua 4096 tệp mở tối đa cho người dùng không root?


13

Tôi dường như không thể tăng nofilegiới hạn cho người dùng không root trên Ubuntu 14.04, mặc dù tuân theo mọi câu trả lời của StackExchange liên quan đến vấn đề này. Cho đến nay tôi có:

$ cat /etc/security/limits.d/custom.conf
@www-data hard nofile 50000
@www-data soft nofile 50000
# even tried specifying the username directly:
myuser hard nofile 50000
myuser soft nofile 50000

$ grep 'limits' /etc/pam.d/common-session*
/etc/pam.d/common-session:session required        pam_limits.so
/etc/pam.d/common-session-noninteractive:session required        pam_limits.so

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

Đã khởi động lại, đăng nhập và:

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

vẫn bằng cách nào đó có vẻ là một giới hạn 4096 tối đa cho người dùng không có rễ.


Tôi đang gặp vấn đề tương tự chính xác trên máy tính để bàn Ubuntu 16.10. Bất kể tôi cố gắng gì, các giới hạn là 1024 hoặc 4096.
NathanAldenSr

Câu trả lời:


13

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

user@notebook:~$ 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ó. Như hướng dẫn của ulimit 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@notebook:~$ ulimit -Hn 9999

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


Cảm ơn TomTomTom. Tôi đã có một sự thay đổi như vậy trong /etc/security/limits.d/custom.conf. Tôi đã thử đặt trực tiếp vào /etc/security/limits.conf như bạn đề xuất và tôi vẫn nhận được "bash: ulimit: open files: không thể sửa đổi giới hạn: Thao tác không được phép".
Caffeine Coma

I - chỉ đoán - một trong hai lý do, tại sao nó không hoạt động dành cho bạn:
TomTomTom

1
Mất tôi quá lâu để chỉnh sửa bình luận không đầy đủ. Ở đây chúng tôi đi: Tôi - chỉ đoán - một trong hai lý do, tại sao điều này không hiệu quả với bạn: 1. /etc/security/limits*không được đọc bởi cơ chế đăng nhập của bạn - vì lý do chưa biết. 2. Giới hạn cứng của bạn được đặt thành 4096 ở nơi khác và "chỉ root mới có thể tăng ...". Bạn có thể kiểm tra hồ sơ của mình như .bashrc(tùy thuộc vào vỏ của bạn) hoặc bạn có thể kiểm tra /etccác địa điểm khác, nơi giới hạn có thể được đặt, như thế nào find /etc | grep -e ulimit -e 4096 -e nofile. BTW: bạn đã thử ssh? Và: bạn đã thay đổi /etc/ssh/sshd.confđể tránh PAM vì một số lý do?
TomTomTom

Có - tất cả đăng nhập là thông qua ssh. Tôi đã vô hiệu hóa UsePAM- một số hướng dẫn khuyến nghị điều này như là một phần của việc chỉ cho phép đăng nhập dựa trên khóa ssh. Tôi sẽ thử bật nó tạm thời, để xem đó có phải là vấn đề không. Cảm ơn!
Caffeine Coma

Afaik, PAM là những gì nên đọc /etc/security/limits*- bạn có thể thử kích hoạt PAM chỉ để kiểm tra điều này. Tôi sẽ thử vô hiệu hóa PAM để xem, sự khác biệt của nó và sẽ báo cáo kết quả. --- Đúng! đó là nó! Với PAM bị vô hiệu hóa, giới hạn của tôi là 4096, cũng được đặt thành 9999 /etc/security/limits.conf.
TomTomTom 13/03/2015

4

Bài viết này , tôi nghĩ giải quyết vấn đề của bạn.

Về cơ bản, bạn nên sử dụng lệnh ulimit để tăng các tài nguyên có sẵn.

Ví dụ:

Sử dụng lệnh sau để hiển thị số lượng mô tả tệp mở tối đa:

cat /proc/sys/fs/file-max

Để xem các giá trị cứng và mềm, hãy đưa ra lệnh như sau:

# ulimit -Hn
# ulimit -Sn

Để xem các giá trị cứng và mềm cho người dùng httpd hoặc oracle, hãy dùng lệnh như sau:

# su - username

Để sửa số lượng tệp tối đa, bạn có thể tăng số lượng tệp mở tối đa bằng cách đặt giá trị mới trong biến kernel / Proc / sys / fs / file-max như sau (đăng nhập với quyền root):

# sysctl -w fs.file-max=100000

Lệnh trên buộc giới hạn tới 100000 tệp. Bạn cần chỉnh sửa /etc/sysctl.conftập tin và đặt dòng sau để sau khi khởi động lại, cài đặt sẽ vẫn như cũ. Để làm điều đó, hãy thêm một lệnh cấu hình như sau:

fs.file-max = 100000

Lưu và đóng tập tin. Người dùng cần đăng xuất và đăng nhập lại để các thay đổi có hiệu lực hoặc chỉ cần gõ lệnh sau:

# sysctl -p

Xác nhận cài đặt của bạn bằng lệnh:

# cat /proc/sys/fs/file-max

hoặc là:

# sysctl fs.file-max

Quy trình trên đặt giới hạn mô tả tệp trên toàn hệ thống (FD), tuy nhiên bạn có thể giới hạn httpd(hoặc bất kỳ người dùng nào khác) giới hạn người dùng cụ thể bằng cách chỉnh sửa /etc/security/limits.conftệp bằng cách chỉnh sửa /etc/security/limits.confvà đặt giới hạn như sau:

httpd soft nofile 4096
httpd hard nofile 10240

Sau đó kiểm tra chúng bằng cách:

# su - httpd
$ ulimit -Hn
$ ulimit -Sn

Nếu bạn gặp sự cố trên các bản phân phối Linux khác, hãy kiểm tra /etc/pam.d/loginvà đảm bảo rằng bạn đã pam_limits.sokích hoạt, ví dụ:

session required pam_limits.so

2
Xin chào Brooke. Thật không may, tôi đã thử các đề xuất từ ​​bài viết đó. Mặc dù 'ulimit -Hn' là mới đối với tôi; Nó in 4096, giới hạn tôi tiếp tục va vào.
Caffeine Coma

0

Nếu đó là Dịch vụ, bạn có thể thử đặt giới hạn trong /etc/systemd/system/{ServiceName}.servicethêmLimitNOFILE=65536


Ubuntu 14.04 không sử dụng systemd theo mặc định.
5

Ubuntu 16.04, Tomcat 8 làm việc cho tôi
Arjang 15/03/18
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.