Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why redis can not set maximum open file

Tags:

redis

1167:M 26 Apr 13:00:34.666 # You requested maxclients of 10000 requiring at least 10032 max file descriptors.
1167:M 26 Apr 13:00:34.667 # Redis can't set maximum open files to 10032 because of OS error: Operation not permitted.
1167:M 26 Apr 13:00:34.667 # Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'.
1167:M 26 Apr 13:00:34.685 # Creating Server TCP listening socket 192.34.62.56​​:6379: Name or service not known
1135:M 26 Apr 20:34:24.308 # You requested maxclients of 10000 requiring at least 10032 max file descriptors.
1135:M 26 Apr 20:34:24.309 # Redis can't set maximum open files to 10032 because of OS error: Operation not permitted.
1135:M 26 Apr 20:34:24.309 # Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'.
1135:M 26 Apr 20:34:24.330 # Creating Server TCP listening socket 192.34.62.56​​:6379: Name or service not known
like image 584
Dam SamNang Avatar asked Apr 27 '16 04:04

Dam SamNang


People also ask

How do you increase number of open files limit in Linux?

You can increase the maximum number of open files on the Linux host by setting a new value in the kernel variable file, /proc/sys/fs/file-max. This command forces the limit to 262144 files which is four times the default setting. (The default setting is appropriate for many environments.)

What is the maximum value for open files in Linux?

Linux systems limit the number of file descriptors that any one process may open to 1024 per process. (This condition is not a problem on Solaris machines, x86, x64, or SPARC). After the directory server has exceeded the file descriptor limit of 1024 per process, any new process and worker threads will be blocked.

What is fs file Max?

The file-max file /proc/sys/fs/file-max sets the maximum number of file-handles that the Linux kernel will allocate.


3 Answers

Well, it's a bit late for this post, but since I just spent a lot of time(the whole night) to configure a new redis server 3.0.6 on ubuntu 16.04. I think I should just write down how I do it so others don't have to waste their time...

For a newly installed redis server, you are probably going to see the following issues in redis log file which is /var/log/redis/redis-server.log

Maximum Open Files

3917:M 16 Sep 21:59:47.834 # You requested maxclients of 10000 requiring at least 10032 max file descriptors.
3917:M 16 Sep 21:59:47.834 # Redis can't set maximum open files to 10032 because of OS error: Operation not permitted.
3917:M 16 Sep 21:59:47.834 # Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'.

I have seen a lot of posts telling you to modify

/etc/security/limits.conf
redis soft nofile 10000
redis hard nofile 10000

or

/etc/sysctl.conf
fs.file-max = 100000

That might work in ubuntu 14.04, but it certainly not works in ubuntu 16.04. I guess it has something to do with changing from upstart to systemd, but I am no expert of linux kernel!

To fix this you have to do it the systemd way

/etc/systemd/system/redis.service
[Service]
...
User=redis
Group=redis
# should be fine as long as you add it under [Service] block
LimitNOFILE=65536
...

Then you must daemon reload and restart the service

sudo systemctl daemon-reload
sudo systemctl restart redis.service

To check if it works, try to cat proc limits

cat /run/redis/redis-server.pid
cat /proc/PID/limits

and you will see

Max open files            65536                65536                files     
Max locked memory         65536                65536                bytes   

At this stage, the maximum open file is solved.

Socket Maximum Connection

2222:M 16 Sep 20:38:44.637 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

Memory Overcommit

2222:M 16 Sep 20:38:44.637 # Server started, Redis version 3.0.6
2222:M 16 Sep 20:38:44.637 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

Since these two are related, we will solve it at once.

sudo vi /etc/sysctl.conf

# Add at the bottom of file
vm.overcommit_memory = 1
net.core.somaxconn=1024

Now for these configs to work, you need to reload the config

sudo sysctl -p

Transparent Huge Pages

1565:M 16 Sep 22:48:00.993 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

To permanently solve this, follow the log's suggestion, and modify rc.local

sudo vi /etc/rc.local

if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi

This require you to reboot, backup your data or do anything you need before you actually do it!!

sudo reboot

Now check you redis log again, you should have a redis server without any errors or warnings.

like image 138
cwhsu Avatar answered Oct 17 '22 13:10

cwhsu


Redis will never change the maximum open files.

This is a OS configuration and it can be configured on a per user basis also. The error is descriptive and tells you: "increase 'ulimit -n'"

You can refer to this blog post on how to increase the maximum open files descriptors: http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/

like image 24
lsamayoa Avatar answered Oct 17 '22 13:10

lsamayoa


You just need this command in console:

sudo ulimit -n 65535
like image 36
sina rahmanian Avatar answered Oct 17 '22 13:10

sina rahmanian