limits.conf로 업데이트 한 후에도 redis가 1024 개 파일의 제한을보고하는 이유는 무엇입니까?


9

내 redis.log 파일 맨 위에이 오류가 표시됩니다.

현재 최대 열린 파일은 1024입니다. maxclients는 낮은 ulimit를 보완하기 위해 4064로 줄었습니다.

나는 이 단계들을 편지에 따라 갔다가 다시 부팅했다.

또한, 나는 실행할 때 이것을 봅니다 ulimit.

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

이 오류가 특이한가? 그렇지 않은 경우 수행해야 할 다른 단계는 무엇입니까? 우분투 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               

따라서 서버는 우분투로 실행 중입니다.

주석없이 내 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'

sudo로

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

또한 redis.log 파일의 맨 위에이 오류가 표시되지만 관련이 있는지 확실하지 않습니다. 우분투 사용자는 최대 열린 파일을 변경할 수 없지만, 높은 ulimits를 설정하면 설정하지 않아도됩니다.

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

답변:


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

도움이되어 다행입니다. 사실 내 xubuntu 14.04에는 /etc/pam.d/sudo 안에이 줄이 없습니다. 지금 12.04를 확인할 수 없습니다.
Navern

데비안에서 systemd를 사용할 때 serverfault.com/questions/770037/…
tholu

3

pam_limits.so와 관련이없는이 게시물을 찾는 사용자를위한 또 다른 제안. 필자의 경우 Redis는 감독자를 통해 시작되었습니다. 이 경우 감독자가 사용자 컨텍스트를 전환 한 방법으로 인해 사용자에 대해 구성한 것이 아니라 시스템 기본 제한으로 새 세션이 실행되었습니다.

이 경우의 해결책은 여기 에서 발견 되었습니다 . 요약하자면, 관리자의 시작 명령의 일부로 ulimit -n을 통해 제한을 정의해야합니다.

예:

[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 사용자를위한 참고 사항 :

부팅시 Redis (upstart를 통한 f.ex)를 시작하는 경우 "limit"스탠자를 사용하여이 제한을 설정할 수 있습니다.

그래서 nofile의 경우 :

limit nofile 4096 4096

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.