测验:文件描述符与上限
nginx 显示打开文件过多。 ulimit -n 是 1048576。下一步看哪里?
- /etc/security/limits.conf
- grep '最大打开文件数' /proc//limits
打开文件过多和系统中打开文件过多有什么区别?
- 含义是一样的,但是根据内核版本的不同,表达方式也不同。
- 正面来自插座,背面来自普通锉刀。
- 第一个是EMFILE(进程限制),第二个是ENFILE(系统全局限制)。
- 以下仅发生在容器环境中。
我在unit文件中提高了systemd服务的fd限制,但是没有体现。原因是什么?
- 未执行 systemctl daemon-reload。
- 该值超出了 fs.file-max
- 我只是重新加载,并没有重新启动。 rlimit 在进程创建时应用。
- LimitNOFILE 指定仅软
看ss,堆了20000个CLOSE-WAIT套接字,而且都是一样的。这是什么意思?
- 我们的应用程序没有调用 close()
- 另一台服务器超载
- 没有问题,内核很快就会自动清理它。
- TIME-WAIT太多,无法重复使用。
如果有很多TIME-WAIT套接字,为什么提高fd限制没有意义?
- 因为TIME-WAIT消耗了两倍的fd
- 因为TIME-WAIT不是套接字
- 这是因为TIME-WAIT不消耗fd,内核会自行清理。
- 因为 fd 限制不适用于套接字
如果我打开同一个文件 50 次怎么办?
- 只创建一个fd,增加引用计数。
- 从第二次开始就会出现错误。
- 创建了 50 个 fd,它们都指向同一个 inode。
- 复制了 50 个文件