文件描述符

  • 查看进程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);
}