在benchmarked写的服务器的时候就遇到了too many file open 这个报错。
由于遇到过很多次了,所以知道应该是单机fd打满了。
首先来看看 机器最多支持多少fd
cat /proc/sys/fs/file-max
通过上面的命令可以看到机器现在一个session 最多可以支持打开多少fd。我的机器上现在能看到的最大值是6w多个
同时我们来看看现在本机现在开了多少fd。
ulimit -n
这个命令会返回目前返回最大支持的单session fd
看更多的信息可以使用
ulimit -a
然后现在重头戏来了,我们可以临时指定使用的最大的fd上限 也就是我们通过cat /proc/sys/fs/file-max命令看到的值
sysctl -w fs.file-max=100000
我们也可以通过修改配置文件来永久改变该机器最大fd上限
vi /etc/sysctl.conf
在最后一行加上
fs.file-max = 65536
即可,logout and login 之后,使用syscrl -p 查看最大fd上限的改变效果。
现在我们需要修改实际的fd限制,也就是我们使用ulimit -n 看到的那个值
vi /etc/security/limits.conf
然后增加配置
* soft nproc 65535 * hard nproc 65535 * soft nofile 65535 * hard nofile 65535
同样login logout。这里第一列是用途,如果我们只允许httpd使用那么多fd的话,那么我们可以在这里设置成httpd就行了。
Reference:
https://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/ Linux Increase The Maximum Number Of Open Files / File Descriptors (FD)