为什么即使更新为limits.conf,redis也报告限制为1024个文件?


9

我在redis.log文件的顶部看到此错误:

当前最大打开文件数为1024。maxclients已减少为4064,以补偿较低的ulimit。

按照以下步骤进行操作(并重新启动):

而且,我在运行时看到了这一点ulimit

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

这个错误似是而非吗?如果没有,我还需要执行其他哪些步骤?我在Ubuntu LTS 14.04.1(同样是树的顶端)上运行redis 2.8.13(树的顶端)。

这是用户信息:

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               

因此,服务器以ubuntu的身份运行。

这是我的limits.conf文件,不带注释:

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

这是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'

作为须藤

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

另外,我在redis.log文件的顶部看到此错误,不确定是否相关。这是有道理的,不允许ubuntu用户更改打开的最大文件,但是鉴于我尝试设置的上限太高,他不需要:

[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.

Answers:


4

您应该在/etc/pam.d/目录中编辑文件。

在您运行的情况下sudo -u ubuntu /usr/local/bin/redis-server,您应在/etc/pam.d/sudo或添加以下行/etc/pam.d/common-session-noninteractive,以防/etc/pam.d/sudo包含此行:

session required pam_limits.so

这应该有助于设置内部提供的配置/etc/security/limits.conf


就是这样!非常感谢。听起来像是从Ubuntu 2012.04 LTS更改为Ubuntu 2014.04 LTS。
esilver 2014年

很高兴为您提供帮助。确实,我的xubuntu 14.04在/etc/pam.d/sudo中没有此行。目前无法检查12.04。
Navern 2014年

当在Debian使用systemd,看到serverfault.com/questions/770037/...
tholu

3

用户发现此帖子的问题与pam_limits.so无关的另一种建议。就我而言,Redis是通过主管启动的。在这种情况下,监督交换用户上下文导致新会话以系统默认限制(而不是我为用户配置的限制)运行的方法。

在这种情况下的解决方案在这里找到。简而言之,您需要通过ulimit -n定义限制,作为supervisord中启动命令的一部分。

例:

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

1

以及增加打开文件的限制。您需要在redis.conf中增加maxclients。默认情况下仅为10000。

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

0

其他有类似问题的Ubuntu用户的注意事项:

如果要通过Upstart在启动f.ex时启动Redis,则可以使用“ limit”节来设置此限制。

所以对于nofile:

limit nofile 4096 4096

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.