Linux 系统参数调优

打开文件数

  在 Linux 中,文件描述符是一种资源,为了控制对资源的合理使用,Linux 会限制所有进程所能打开的文件描述符总数。可以通过下面的命令查看:

1
2
$ cat /proc/sys/fs/file-max
99736

  通常来说,如果机器的内存越大,那么file-max的默认值也会越大。当然,也可以手动调大它:

1
2
3
$ sudo vi /etc/sysctl.conf
fs.file-max = 100000
$ sudo sysctl -p # 使改动生效

  那么要怎样才能知道系统当前打开了多少文件描述符呢?可以用下面的命令:

1
2
$ cat /proc/sys/fs/file-nr
704 0 100000

  输出结果的第一个值表示系统当前打开了 704 个文件描述符,在 Linux 2.6 之后,第二个值总是 0,第三个值等于/proc/sys/fs/file-max的值。


  然而fs.file-max这个参数是系统级别的限制,除此之外,Linux 还会限制某个用户所能打开的文件描述符数量,这个值默认是 1024,可以用下面命令查看:

1
2
$ ulimit -n
1024

  从上面的命令可以看到,当前用户最多只能打开 1024 个文件描述符。有时在运行高并发服务器的时候,经常会出现文件描述符不够用的错误,这时候就需要调高这个用户所能打开的文件描述符数量了,可以通过下面的命令修改:

1
2
3
$ sudo vi /etc/security/limits.conf
www-data soft nofile 10240
www-data hard nofile 20480

  上面的命令为www-data用户设置所能打开的文件描述符数量,其中软限制为 10240,而硬限制为 20480。那么软限制和硬限制的区别是什么呢?其实进程在运行的时候可以修改软限制的值,但要保证这个值不能超过硬限制。然而进程却无法修改硬限制的值,除非以 superuser 的身份运行。

参考资料