[转帖]linux文件描述符文件/etc/security/limits.conf

linux文件描述符文件/etc/security/limits.conf

https://blog.csdn.net/fanren224/article/details/79971359

需要多学习了解一下.

文件描述符是什么?和文件句柄有啥区别?

文件描述符是linux/unix操作系统中特有的概念。相当于windows系统中的文件句柄。一个意思不同叫法。

Linux系统中, 每当进程打开一个文件时,系统就为其分配一个唯一的整型文件描述符,用来标识这个文件。标准C中每个进程默认打开的有三个文件,标准输入,标准输出,标准错误,分别用一个FILE结构的指针来表示,即stdin,stout,sterr,这三个结构分别对应着三个文件描述符0,1,2。

文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket。第一个打开的文件是0,第二个是1,依此类推。linux 操作系统通常对每个进程l能打开的文件数量有一个限制。

linux系统对文件描述符的限制有两个级别

系统级别:使用cat /proc/sys/fs/file-max查看,默认值是根据内存大小,系统自动设置的,一般为内存大小(KB)的10%,shell下可以这样计算grep -r MemTotal /proc/meminfo | awk ‘{printf("%d",$2/10)}‘(可能有各种其他原因导致file-max没有设置为内存的10%)

用户级别:默认是1024,使用ulimit -n查看

为什么要限制打开的文件描述符?

原因1 – 资源问题:每个打开的文件都需要消耗内存来管理,而内存是有限的。

原因2 – 安全问题:如果不限制的话,有不怀好心的人启动一个进程来无限的创建和打开新的文件,会让服务器崩溃。

所以限制文件描述符的数量对于linux系统的稳定性是非常重要的。

配置文件

限制资源使用的配置文件是 /etc/security/limits.conf,和/etc/security/limits.d/目录,/etc/security/limits.d/里面配置会覆盖/etc/security/limits.conf的配置

可以限制的资源类型如下:

所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时,它支持硬资源和软资源的限制。

  • 第一列表示用户和组(@开头)。第二列表示软限制还是硬限制,第三列表示限制的资源类型,第四列表示限制的最大值
  • hard和soft的区别: soft是一个警告值,而hard则是一个真正意义的阀值,超过就会报错,一般情况下都是设为同一个值。
  • core是内核文件,nofile是文件描述符,noproc是进程,一般情况下只限制文件描述符数和进程数就够了
#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#root            hard    core            100000
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#ftp             -       chroot          /ftp
#@student        -       maxlogins       4

# End of file

-----------分割线,上面是配置文件的模板,下面是自己添加的------------------------

*                 soft     nofile         655350      #表示任何一个用户可以打开的最大的文件描述符数量
*                 hard    nofile         655350

*                 soft    nproc          655350      #表示任何一个用户可以打开的最大的进程数
*                hard    nproc          655350

@student        hard    nofile          65535       #student组中的任何人最多能打开文件描述符数量是65535,并且会在打开65000个时发出警告
@student        soft    nofile          65000

@student        hard    nproc           50            #student组中的任何人不能拥有超过50个进程,并且会在拥有30个进程时发出警告
@student        soft    nproc           30

系统级别

1、查看

$ cat /proc/sys/fs/file-max
186405

2、设置

临时性

$ echo 1000000 > /proc/sys/fs/file-max

永久性

在/etc/sysctl.conf中设置,应该设什么值是最佳实践?比如8G的内存,设为8192/2 * 256 = 524288

fs.file-max = 1000000 

用户级别

1、查看,-n默认查看的是soft limit,这个值是从/etc/security/limits.conf文件的* soft nofile 655350来的

$ ulimit -n
170000

查看hard limit

$ ulimit -Hn
170000

2、设置

临时性:

通过ulimit -Sn设置最soft limit,注意soft limit必须小于hard limit

$ ulimit -Sn 160000

通过ulimit -Hn设置最Hard limit

$ ulimit -Hn 160000

同时设置soft limit和hard limit。对于非root用户只能设置比原来小的hard limit。

ulimit -n 180000

永久性:

root权限下,在/etc/security/limits.conf中添加如下两行,*表示所有用户,重启生效

* soft nofile 102400

* hard nofile 104800

注意:设置nofile的hard limit还有一点要注意的就是hard limit不能大于/proc/sys/fs/nr_open,假如hard limit大于nr_open,注销后将无法正常登录。

查看系统当前打开的文件描述符数量

其中第一个数表示当前系统分配后已使用的文件描述符数,第二个数表示分配后未使用的(内核2.6版本中这个值总是为0,这并不是一个错误,它意味着已经分配的文件描述符总会被使用),第三个数等于最大值file-max。

$ sudo cat /proc/sys/fs/file-nr
2176    0    2048000

查看某个进程打开的文件描述符数量

$ lsof -p 20262 |wc -l
5

看下哪些进程占用的文件描述符比较多,排下序

[[email protected]] ~$ lsof -n |awk ‘{print $10}‘|sort |uniq -c |sort -nr|head -10
   2367
    838 socket
    703 /dev/null
    658 pipe
    599 [eventpoll]
    533 [eventfd]
    495 /
    183 (ESTABLISHED)
    178 protocol:
    175 /usr/bin/containerd-shim

https://blog.csdn.net/cywosp/article/details/38965239
https://www.cnblogs.com/fsw-blog/p/4543914.html
http://www.bidutools.com/?p=914
https://jameswxx.iteye.com/blog/2096461

原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/11043565.html

时间: 2024-07-31 07:24:54

[转帖]linux文件描述符文件/etc/security/limits.conf的相关文章

[性能分析]linux文件描述符(转)

1.什么是文件和文件描述符 Linux中文件可以分为4种:普通文件.目录文件.链接文件和设备文件.1.普通文件是用户日常使用最多的文件,包括文本文件.shell脚本.二进制的可执行和各种类型的数据.ls -lh 来查看某个文件的属性,可以看到有类似 -rw-r--r-- ,值得注意的是第一个符号是 - ,这样的文件在Linux中就是普通文件.这些文件一般是用一些相关的应用程序创建,比如图像工具.文档工具.归档工具... .... 或 cp工具等.这类文件的删除方式是用rm 命令:2.目录文件在l

Linux 文件描述符问题

昨天解了个bug,关于文件描述符的,这种问题很久之前也遇到过,这次再犯真的不该. 问题是这样的. fopen()打开一个文件,然后做了一些操作,然后函数执行结束...没有调用fclose()导致了,再执行此函数时,系统提示,文件描述符分配完毕. 分析了下: 根据以前的知识储备, 1.linux打开文件描述符的最大个数为1024,根据这次发现, 2.这是针对于单独进程的, 3.是从/proc/{pid}/fd/这个文件夹下可以看到. 4.分配文件描述符是递增的顺序.(看我之前的博客会发现这是那个b

[性能分析]linux文件描述符

1.什么是文件和文件描述符 Linux中文件可以分为4种:普通文件.目录文件.链接文件和设备文件.1.普通文件是用户日常使用最多的文件,包括文本文件.shell脚本.二进制的可执行和各种类型的数据.ls -lh 来查看某个文件的属性,可以看到有类似 -rw-r--r-- ,值得注意的是第一个符号是 - ,这样的文件在Linux中就是普通文件.这些文件一般是用一些相关的应用程序创建,比如图像工具.文档工具.归档工具... .... 或 cp工具等.这类文件的删除方式是用rm 命令:2.目录文件在l

调整进程的最大linux文件描述符

1.介绍 ulimit 命令提供了针对 shell和或由该 shell 启动的进程占用资源的控制. 持久化修改生效是在/etc/security/limits.conf中进行数据写入. 写入的格式为:<domain><type><item><value> domain:用户名/用户组名/其他(查看man limits.conf) type: hard / soft ,分别指实际最大值类型和预警值类型,一个是max,一个是threshold,在threshol

Linux系统 /etc/security/limits.conf 配置

1. limits.conf 配置文件描述 limits.conf文件实际是Linux PAM(插入式认证模块,Pluggable Authentication Modules)中 pam_limits.so 的配置文件,突破系统的默认限制,对系统访问资源有一定保护作用. limits.conf 和sysctl.conf区别在于limits.conf是针对用户,而sysctl.conf是针对整个系统参数配置. 2. limits.conf工作原理 limits.conf是 pam_limits.

linux /proc/sys/fs/file-nr /proc/sys/fs/file-max /etc/security/limits.conf 三者的关联

ulimit -n 对应 /etc/security/limits.conf 文件设置 问题: Can’t open so many files 对于linux运维的同学们,相信都遇到过这个问题. 在Linux下一切资源皆文件,普通文件是文件,磁盘打印机是文件,socket 当然也是文件.系统默认设置成1024,但是这个数字对于服务器特别是大并发的远远是不够的,所以,我们需要结合实际情况修改成一个更大更合理的值. 修改方法 临时解决方案: ulimit -SHn 65535 永久解决方案,注意,

linux资源使用配置文件 /etc/security/limits.conf和ulimit

limits.conf文件实际上是linux PAM中pam_limits.so的配置文件,而且只针对于单个会话. limits.conf的格式如下: <domain> <type> <item> <value> domain有好几种格式,具体可以用man limits.conf来查看,不过一般来说,我们都是用的用户名和组名的形式:username|@groupname 设置需要被限制的用户名,组名前面加@和用户名区别.也可以用通配符*来做所有的限制. ty

/etc/security/limits.conf 文件说明

/etc/security/limits.conf 是 Linux 资源使用配置文件,用来限制用户对系统资源的使用 语法:<domain>  <type>  <item>  <value> [[email protected] ~]# cat /etc/security/limits.conf * soft nproc 65535 # 警告设定所有用户最大打开进程数为65535 * hard nproc 65535 # 严格设定所有用户最大打开进程数为655

[转帖]/etc/security/limits.conf的含义

https://www.cnblogs.com/pzk7788/p/7250723.html /etc/security/limits.conf 是 Linux 资源使用配置文件,用来限制用户对系统资源的使用 语法:<domain>  <type>  <item>  <value> [[email protected] ~]# cat /etc/security/limits.conf * soft nproc 65535 # 警告设定所有用户最大打开进程数