Ubuntu 16.04 systemd redis与ulimit问题

Ubuntu 14.04到16.04交换之后,我一直在使用我们的新的redis服务器。 打开的文件的configuration限制使用所有的指南说改变/etc/security/limits.conf用下列设置

* soft nofile 65535 * hard nofile 65535 root soft nofile 65535 root hard nofile 65535 

也可以添加到/etc/pam.d/common-session和/etc/pam.d/common-session-noninteractive

 session required pam_limits.so 

我做了所有这些改变,但是redis仍然以4096的文件限制启动,在生产负载下我们很快达到了最大连接数。

经过多次搜索,我终于发现systemd的标准限制是4096,无论你在系统级别设置了什么,系统级别总是优先。 解决方法是通过编辑/etc/systemd/system.conf来更改systemd打开的文件限制,并添加以下设置

 DefaultLimitNOFILE=65536 

看来在systemd中有很多默认设置会覆盖系统设置,所以必须在systemd中设置

所以,如果任何人使用这些是我的Ubuntu 16.04服务器运行生产redis的最终设置。

编辑/etc/systemd/system.conf(sudo nano /etc/systemd/system.conf)并添加

 DefaultLimitNOFILE=65536 

编辑/etc/security/limits.conf(sudo nano /etc/security/limits.conf)并添加

 * soft nofile 64000 * hard nofile 64000 root soft nofile 64000 root hard nofile 64000 

编辑/etc/pam.d/common-session(sudo nano /etc/pam.d/common-session)并添加

 session required pam_limits.so 

编辑/etc/pam.d/common-session-noninteractive(sudo nano /etc/pam.d/common-session-noninteractive)并添加

 session required pam_limits.so 

编辑/etc/rc.local(sudo nano /etc/rc.local)并添加

 sysctl -w net.core.somaxconn=65535 

编辑/etc/sysctl.conf(sudo nano /etc/sysctl.conf)并添加

 vm.overcommit_memory = 1 

编辑/etc/rc.local(sudo nano /etc/rc.local)并添加

 echo never > /sys/kernel/mm/transparent_hugepage/enabled