Redis.logファイルの上部にこのエラーが表示されます。
現在の最大オープンファイル数は1024です。低いulimitを補うためにmaxclientsが4064に削減されました。
私は これらの手順を手紙に従って (そして再起動)しました:
さらに、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ユーザーが最大オープンファイルの変更を許可されていないことは理にかなっていますが、私が設定しようとしたulimitが高ければ、彼は次のことを行う必要はありません。
[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.
/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
内で提供される構成の設定に役立ちます。
問題がpam_limits.soに関連していないこの投稿を見つけたユーザーに対する別の提案。私の場合、Redisはスーパーバイザ経由で起動されていました。この場合、スーパーバイザがユーザーコンテキストを切り替えた方法により、ユーザーに対して構成したものではなく、システムのデフォルトの制限で新しいセッションが実行されました。
その場合の解決策が見つかりました here 。それが不足している場合、監視対象の起動コマンドの一部としてulimit -nを介して制限を定義する必要があります。
例:
[program:redis-a]
command=bash -c "ulimit -n 32768; exec /usr/local/bin/redis-server /etc/redis/a.conf"
開いているファイルの制限を増やすだけでなく。 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
同様の問題を持つ他のUbuntuユーザーへの注意:
ブート時にRedisを起動する場合、f.exはUpstartを使用して、「limit」スタンザでこの制限を設定できます。
したがって、nofileの場合:
limit nofile 4096 4096