今天遇到一个 too many open file 的问题,这种问题遇到得多了,一般来说都是有句柄泄露导致的,但是,今天遇到的情况还真的是句柄限制太小(1024)导致的,所以当然得设置一下了。

以前都是直接按照经验,敲上命令 ulimit -S xxxx 就收工了,但是,今天有兴致得看了一下 ulimit 这个命令,然后学到了点东西:

  1. [root@liqiang.io]# ulimit -a
  2. -t: cpu time (seconds) unlimited
  3. -f: file size (blocks) unlimited
  4. -d: data seg size (kbytes) unlimited
  5. -s: stack size (kbytes) 1025
  6. -c: core file size (blocks) 0
  7. -m: resident set size (kbytes) unlimited
  8. -u: processes 61757
  9. -n: file descriptors 1025
  10. -l: locked-in-memory size (kbytes) 64
  11. -v: address space (kbytes) unlimited
  12. -x: file locks unlimited
  13. -i: pending signals 61757
  14. -q: bytes in POSIX msg queues 819200
  15. -e: max nice 0
  16. -r: max rt priority 0
  17. -N 15: unlimited

例如这里有好多个 size,查找了一下资料,然后发现 limit 也分 soft limit 和 hard limit。

什么是 soft limit 和 hard limit

怎么修改 soft limit

  1. 配置文件
    1. [root@liqiang.io]#tail -2 /etc/security/limits.conf
    2. liqiang soft nofile 4096
    3. root soft nofile 4096
  2. 命令行

    1. [root@liqiang.io]# ulimit -S -n 2048
    2. soft limit 设置为 2048
    3. [root@liqiang.io]# ulimit -S -xx xxxx

帮助

命令/文件 描述
ulimit -S -a view all soft limits
ulimit -H -a view all hard limits
ulimit -S [option] [number] set a specific soft limit for one variable
ulimit -H [option] [number] set a specific hard limit for one variable
/etc/security/limits.conf file where you can set soft and hard limits per user or for everyone

Ref