• 主页

  • 投资

  • IT

    🔥
  • 设计

  • 销售

关闭

返回栏目

关闭

返回服务器栏目

20 - 配置 - 文件描述符 - 文件句柄

作者:

贺及楼

成为作者

更新日期:2024-10-11 11:51:58

Linux的核心思想之一就是”一切皆文件”

/proc/sys/fs/file-max

用于限制整个系统能够分配的文件描述符

  1. cat /proc/sys/fs/file-max
  2. vi /proc/sys/fs/file-max
  3. ## 临时修改,机器重启后失效
  4. sysctl -w fs.file-max=102400
  5. ## 永久修改
  6. vi /etc/sysctl.conf
  7. fs.file-max=102400
  8. ## 执行下面命令使配置生效,一说要重启服务器才生效
  9. sysctl -p
  1. cat /proc/sys/fs/file-max

文件描述符
这个是文件描述符的默认值

/proc/sys/fs/file-nr

只读文件,当前系统中文件描述符的使用情况

  1. 1952 0 3043564
  2. 当前系统中文件描述符的使用情况
  3. 第一个(6144)是系统已经分配的文件描述符数
  4. 第二个(0)是系统已经分配但未使用的文件描述符数
  5. 第三个是内核最大能分配的文件描述符数,与file-max一致

/proc/sys/fs/nr_open

单个进程可以分配的最大文件描述符,对系统所有用户下的所有进程都生效

  1. cat /proc/sys/fs/nr_open

soft limit && hard limit

在Linux的系统中对于进程(Process)会有一些限制,这就所谓的limit,在实际应用中最常见的就是对打开文件(Open Files)的限制,在配置web 服务如nginx时就会用到。在linux中这些限制是分为软限制(soft limit)和硬限制(hard limit)的。他们的区别就是

软限制可以在程序的进程中自行改变(突破限制)
硬限制则不行(除非程序进程有root权限)

  1. ulimit -Sn 查看的是软限制
  2. ulimit -Hn 查看的是硬限制

ulimit 文件描述符状态

ulimit命令选项:

选项 释义
-a 显示目前资源限制的设定;
-c <core文件上限> 设定core文件的最大值,单位为区块;
-d <数据节区大小> 程序数据节区的最大值,单位为KB;
-f <文件大小> shell所能建立的最大文件,单位为区块;
-H 设定资源的硬性限制,也就是管理员所设下的限制;
-m <内存大小> 指定可使用内存的上限,单位为KB;
-n <文件数目> 指定同一时间最多可开启的文件数;
-p <缓冲区大小> 指定管道缓冲区的大小,单位512字节;
-s <堆叠大小> 指定堆叠的上限,单位为KB;
-S 设定资源的弹性限制;
-t <CPU时间> 指定CPU使用时间的上限,单位为秒;
-u <程序数目> 用户最多可开启的程序数目;
-v <虚拟内存大小> 指定可使用的虚拟内存上限,单位为KB。
  1. ## ulimit -a输出内容详解:
  2. [root@lh ~]# ulimit -a
  3. core file size (blocks, -c) 0 #core文件的最大值为100 blocks。
  4. data seg size (kbytes, -d) unlimited #进程的数据段可以任意大。
  5. scheduling priority (-e) 0
  6. file size (blocks, -f) unlimited #文件可以任意大。
  7. pending signals (-i) 98304 #最多有98304个待处理的信号。
  8. max locked memory (kbytes, -l) 32 #一个任务锁住的物理内存的最大值为32KB。
  9. max memory size (kbytes, -m) unlimited #一个任务的常驻物理内存的最大值。
  10. open files (-n) 1024 #一个任务最多可以同时打开1024的文件。
  11. pipe size (512 bytes, -p) 8 #管道的最大空间为4096字节。
  12. POSIX message queues (bytes, -q) 819200 #POSIX的消息队列的最大值为819200字节。
  13. real-time priority (-r) 0
  14. stack size (kbytes, -s) 10240 #进程的栈的最大值为10240字节。
  15. cpu time (seconds, -t) unlimited #进程使用的CPU时间。
  16. max user processes (-u) 98304 #当前用户同时打开的进程(包括线程)的最大个数为98304。
  17. virtual memory (kbytes, -v) unlimited #没有限制进程的最大地址空间。
  18. file locks (-x) unlimited #所能锁住的文件的最大个数没有限制

/etc/security/limits.conf

  1. cat /etc/security/limits.conf
  2. vi /etc/security/limits.conf
  3. ## 添加:
  4. DefaultLimitNOFlLE=65536

/etc/systemd/system.conf

  1. cat /etc/systemd/system.conf
  2. vi /etc/systemd/system.conf
  3. ## 添加:
  4. DefaultLimitNOFlLE=65536

/etc/systemd/user.conf

  1. cat /etc/systemd/user.conf
  2. vi /etc/systemd/user.conf
  3. ## 添加:
  4. DefaultLimitNOFlLE=65536

文件描述符查看状态命令

  1. 统计各进程打开句柄数:lsof -n|awk '{print $2}'|sort |uniq -c|sort -nr
  2. 统计各用户打开句柄数:lsof -n|awk '{print $3}'|sort |uniq -c|sort -nr
  3. 统计各命令打开句柄数:lsof -n|awk '{print $1}'|sort |uniq -c|sort -nr
  4. 查看当前进程实时打开的文件数:lsof -p 进程PID | wc -l
  5. 查看某个进程的句柄数限制:cat /proc/进程ID/limits
  6. 查看系统限制的最大文件打开数:cat /proc/sys/fs/file-max
  7. 查看系统当前已使用的文件句柄数:cat /proc/sys/fs/file-nr