Tại sao redis báo cáo giới hạn 1024 tệp ngay cả sau khi cập nhật lên giới hạn.


9

Tôi thấy lỗi này ở đầu tệp redis.log của tôi:

Các tệp mở tối đa hiện tại là 1024. maxclents đã được giảm xuống 4064 để bù cho mức độ thấp.

Tôi đã làm theo các bước sau để thư (và được khởi động lại):

Hơn nữa, tôi thấy điều này khi tôi chạy ulimit:

ubuntu@ip-XX-XXX-XXX-XXX:~$ ulimit -n
65535

Đây có phải là lỗi nghiêm trọng? Nếu không, tôi cần thực hiện những bước nào khác? Tôi đang chạy redis 2.8.13 (mẹo của cây) trên Ubuntu LTS 14.04.1 (một lần nữa, mẹo của cây).

Đây là thông tin người dùng:

ubuntu@ip-XX-XXX-XXX-XXX:~$ ps aux | grep redis
root      1027  0.0  0.0  66328  2112 ?        Ss   20:30   0:00 sudo -u ubuntu /usr/local/bin/redis-server /etc/redis/redis.conf
ubuntu    1107 19.2 48.8 7629152 7531552 ?     Sl   20:30   2:21 /usr/local/bin/redis-server *:6379               

Do đó, máy chủ đang chạy như Ubuntu.

Dưới đây là tập tin giới hạn của tôi mà không có ý kiến:

ubuntu@ip-XX-XXX-XXX-XXX:~$ cat /etc/security/limits.conf | sed '/^#/d;/^$/d'
ubuntu soft nofile 65535
ubuntu hard nofile 65535
root soft nofile 65535
root hard nofile 65535

Và đây là đầu ra của sysctl fs.file-max:

ubuntu@ip-XX-XXX-XXX-XXX:~$ sysctl -a| grep fs.file-max
sysctl: permission denied on key 'fs.protected_hardlinks'
sysctl: permission denied on key 'fs.protected_symlinks'
fs.file-max = 1528687
sysctl: permission denied on key 'kernel.cad_pid'
sysctl: permission denied on key 'kernel.usermodehelper.bset'
sysctl: permission denied on key 'kernel.usermodehelper.inheritable'
sysctl: permission denied on key 'net.ipv4.tcp_fastopen_key'

như sudo

ubuntu@ip-10-102-154-226:~$ sudo sysctl -a| grep fs.file-max
fs.file-max = 1528687

Ngoài ra, tôi thấy lỗi này ở đầu tệp redis.log, không chắc nó có liên quan hay không. Điều này có nghĩa là người dùng Ubuntu không được phép thay đổi các tệp mở tối đa, nhưng với những lo ngại cao mà tôi đã cố gắng đặt, anh ta không cần phải:

[1050] 23 Aug 21:00:43.572 # You requested maxclients of 10000 requiring at least 10032 max file descriptors.
[1050] 23 Aug 21:00:43.572 # Redis can't set maximum open files to 10032 because of OS error: Operation not permitted.

Câu trả lời:


4

Bạn nên chỉnh sửa các tập tin của bạn trong /etc/pam.d/thư mục.

Trong trường hợp của bạn khi bạn chạy sudo -u ubuntu /usr/local/bin/redis-server, bạn nên thêm dòng sau vào /etc/pam.d/sudohoặc /etc/pam.d/common-session-noninteractivetrong trường hợp /etc/pam.d/sudobao gồm dòng này:

session required pam_limits.so

Điều này sẽ giúp thiết lập cấu hình được cung cấp bên trong /etc/security/limits.conf.


Điều đó là vậy đó! Cám ơn rất nhiều. Nghe có vẻ như một sự thay đổi từ Ubuntu 2012.04 LTS sang Ubuntu 2014.04 LTS.
esilver

Rất vui vì đã giúp bạn. Thật vậy, xubfox 14.04 của tôi không có dòng này bên trong /etc/pam.d/sudo. Không thể kiểm tra 12.04 ngay bây giờ.
Navern

Khi sử dụng systemd trên Debian, hãy xem serverfault.com/questions/770037/ trên
tholu

3

Một đề xuất khác cho người dùng tìm thấy bài đăng này có vấn đề không liên quan đến pam_limits.so. Trong trường hợp của tôi, Redis đã được đưa ra thông qua giám sát. Trong trường hợp này, phương thức mà giám sát viên chuyển đổi bối cảnh người dùng khiến phiên mới được chạy với các giới hạn mặc định của hệ thống, không phải là những gì tôi đã cấu hình cho người dùng.

Các giải pháp trong trường hợp đó đã được tìm thấy ở đây . Tóm lại, bạn cần xác định giới hạn thông qua ulimit -n như một phần của lệnh khởi động trong giám sát.

Thí dụ:

[program:redis-a]
command=bash -c "ulimit -n 32768; exec /usr/local/bin/redis-server /etc/redis/a.conf"

1

Cũng như tăng giới hạn tập tin mở. Bạn cần tăng maxclents trong redis.conf của bạn. Nó chỉ là 10000 theo mặc định.

# Once the limit is reached Redis will close all the new connections sending
# an error 'max number of clients reached'.
maxclients 1024000

0

Lưu ý cho những người dùng Ubuntu khác có vấn đề tương tự:

Nếu bạn đang bắt đầu Redis khi khởi động, f.ex thông qua Upstart, bạn có thể đặt giới hạn này với khổ thơ "giới hạn".

Vì vậy, đối với nofile:

limit nofile 4096 4096

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.