max-file
:表示系统级别的能够打开的文件句柄①的数量。是对整个系统的限制,并不是针对用户的。ulimit -n
:控制进程级别(比如 Nginx 进程、MySQL 进程)能够打开的文件句柄的数量。提供对 shell 及其启动的进程的可用文件句柄的控制。这是进程级别的。
一边情况下,服务器上的 ulimit
都需要我们自己设置,而不能使用系统默认的,否则会出现文件描述符耗尽的问题。文件句柄达到上限之后的常见错误有:Too many open files
或者 Socket/File: Can’t open so many files
等。
查看 max-file
:
$ sysctl -a | grep 'fs.file-max'
fs.file-max = 6553560
$ cat /proc/sys/fs/file-max
6553560
设置的方式有两种,一种是临时生效,重启后恢复默认。另一种永久生效。
file-max
的修改:
$ echo 6553560 > /proc/sys/fs/file-max
$ sysctl -w "fs.file-max=34166"
// 以上 2 种重启机器后会恢复为默认值
或
$ echo "fs.file-max = 6553560" >> /etc/sysctl.conf
// 立即生效,此方式永久生效
$ sysctl -p
ulimit open files
修改:
// 这只是在当前终端有效,退出之后,open files 又变为默认值。当然也可以写到 /etc/profile 中,因为每次登录终端时,都会自动执行 /etc/profile
$ ulimit -HSn 65535
或
// 加入以下配置,重启即可生效
$ vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
// 如果需要设置当前用户 session 立即生效,可以执行:
$ ulimit -n 65535
解释说明
1. 文件句柄:在 Linux 环境中,任何事物都是用文件来表示,设备是文件,目录是文件,socket 也是文件。用来表示所处理对象的接口和唯一接口就是文件。应用程序在读/写一个文件时,首先需要打开这个文件,打开的过程其实质就是在进程与文件之间建立起连接,句柄的作用就是唯一标识此连接。此后对文件的读/写时,目标文件就由这个句柄作为代表。最后关闭文件其实就是释放这个句柄的过程,使得进程与文件之间的连接断开。
文章评论