最大文件数限制(一):原理上没有多大的事

你肯定遇到过的故事

作为linux从业者,以下的故事(事故)你们听说或经历过.

事故1: 5万并发都打不上来,你还想上线?

搭建一个网站,结果5w并发打不上来,网站其实就是一个html页面,一个get请求,而且是静态的

事故2: ceph rbd块性能卡到死

挂载一块盘好使,挂载两块盘就不好使了,单独测存储系统又没有问题

Too many open files

发现服务当掉了,然后查看日志,一大堆的Too many open files

最大文件数限制到底是什么玩意

只要输入相关的搜索信息,肯定会告诉你要修改系统的最大文件数限制,如果是ubuntu系统,文件位置/etc/security/limit,

这么多限制都是什么,还有什么软硬限制,记不记得APUE编程时就有这个相关的说明,还有个怎么获取系统限制的demo.

软限制与硬限制

限制资源,一般来说设置一个数值指定最大上限就可以了,为什么弄出来个软限制与硬限制,这是搞什么鬼? 解释起来也非常简单,硬限制就是一个资源限制的上线,一般由管理员来设置. 而软限制用户与进程都可以修改,当然不能超过硬限制, 也就是说这种方式允许用户与进程对资源进行自限制. 当然了,软限制与硬限制谁能改,改大改小都有相应的规则, 但是上面是设置soft limit与hard limit的初衷, 了解这个就足够了.

软硬限制的大小调整有个限定,非常好记忆:

  1. 硬限制如果想调大只能是root权限. 这个是资源上限么,很容易理解,必须是神才能调整。普通用户如果把硬限制手贱的给调整小了,那么自己是调不回来的。
  2. 软限制只要在硬限制控制范围内,随意调整。

如果想了解更多只需要google: linux soft limit vs hard limit

与文件限制相关的参数

参数 含义 说明
/proc/sys/fs/file-max 可以分配的文件句柄的最大数目 linux系统级硬限制, 这个是系统自己算出来的,内存越大这个数据越大
/proc/sys/fs/file-nr 已分配, 已使用, 文件句柄最大数目
ulimit -a
/etc/security/limits.conf
/proc/pid/limits
sudo sysctl -a | grep file
fs.file-max = 13118743
fs.file-nr = 4096       0       13118743
fs.xfs.filestream_centisecs = 3000

/proc/sys/fs/file-max如何计算的?

物理总内存(KB)的10%来计算, grep -r MemTotal /proc/meminfo | awk '{printf("%d",$2/10)}'

/proc/sys/fs/file-nr

ulimit

ulimit -n 1000,表示当前shell当前用户所有进程能打开的最大文件数为1000.

用户级别限制

/etc/security/limits.conf 用户级限制,表示用户能打开的最大文件数量

  1. 修改后什么时候生效

  2. 程序自身的影响

全局的虽然修改了,但是有些程序自己还有自己的配置,所以并没有应用全局的,需要手动修改自身的配置

前面提到了关于文件数的限制,有系统级别,用户级别的,后面就讲下如果通过ulimit命令以及/etc/security/limit.conf文件来去配置约束,从而达到性能需求。

results matching ""

    No results matching ""