文件描述符
-
查看进程id
pidof processName
-
更改文件描述符限制(临时)
ulimit -n 10240
-
更改文件描述符限制(永久,不一定是设置的值)
vi /etc/security/limits.conf
* soft nofile 10240
* hard nofile 102400
-
获取整个系统打开的文件数量
lsof | wc -l
-
获取某个用户打开的文件数量
lsof -u test | wc -l
-
获取某个程序打开的文件数量
lsof -p pid | wc -l
-
查看单一进程支持的最大文件数量
cat /proc/sys/fs/nr_open
-
整个系统支持的最大打开文件数量
cat /proc/sys/fs/file-max
另外
/proc/sys/fs/file-nr
这个文件可以看到系统中已经使用的句柄数
file-max
是内核可分配的最大文件数,nr_open
是单个进程可分配的最大文件数.
如果要在/etc/security/limits.conf
修改超过默认的1048576(1024*1024)应限制以及软限制值时需要先 增大nr_open
值(sysctl -w fs.nr_open=100000000或者直接写入sysctl.conf
文件,然后sysctl -p
)。
通过代码修改当前进程的文件描述符限制
#include <sys/resource.h>
struct rlimit64 limit = {};
for (int i = 30; i >= 10; --i)
{
limit.rlim_cur = limit.rlim_max = 1 << i;
if (setrlimit64(RLIMIT_NOFILE, &limit) == 0)
break;
}
if (setrlimit64(RLIMIT_NOFILE, &limit) == 0)
{
LOG_DEBUG("current process max open files limits {}", limit.rlim_cur);
}