从Ubuntu 14.04交换到16.04后,我的新redis服务器出现了问题。使用所有指南配置打开文件限制表示使用以下设置更改/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,在生产负载下,我们很快就达到最大连接数。
答案 0 :(得分:31)
经过多次搜索后,我终于发现systemd的标准限制为4096,无论您在系统级别设置什么,systemd级别始终优先。解决此问题的方法是通过编辑/etc/systemd/system.conf并添加以下设置来更改systemd打开文件限制
DefaultLimitNOFILE=65536
似乎systemd中有很多默认设置覆盖系统设置,因此必须在systemd中设置
因此,如果它对人们有用,这些是我用于运行生产redis的Ubuntu 16.04服务器的最终设置。
编辑/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
答案 1 :(得分:1)
sysctl值net.core.somaxconn
和vm.overcommit_memory
是与ulimit或打开文件数相关的注释。
它们与:
net.core.somaxconn
:将限制已打开但未接受的连接数
https://serverfault.com/questions/518862/will-increasing-net-core-somaxconn-make-a-difference vm.overcommit_memory
:当物理内存耗尽时过度使用内存的策略
https://www.kernel.org/doc/Documentation/vm/overcommit-accounting 如果您的问题是打开文件的限制(ulimit -Sn/-Hn
处理的话),那么除非您确切知道自己在做什么,否则我不会建议您使用它。