对于Linux中文件描述符的疑问以及解决

news/2024/7/7 14:31:30

问题

​ 每次web服务器或者是几乎所有Linux服务器都需要对文件描述符进行调整,我使用ulimit -n来查看当前用户的最多能打开的文件,默认设置的是1024个,但是系统运行起来以及开启一些简单的服务使用lsof | wc -l查看到系统已经打开几万个文件了,疑问来了,文件描述符的限制为什么没有生效?

解决

​ 我查看的是系统的全部打开的文件,而使用ulimit -n查看到的是当前用户的文件描述符的限制

​ 系统的文件描述符限制使用cat /proc/sys/fs/file-max命令查看

了解Linux系统的文件描述符的限制

linux系统中通常会对每个进程所能打开的文件数据有一个限制,当进程中已打开的文件描述符超过这个限制时,open()等获取文件描述符的系统调用都会返回失败。

  • linux下最大文件描述符的限制有两个方面,一个是用户级的限制,另外一个则是系统级限制。
  1. 用户级限制:ulimit命令看到的是用户级的最大文件描述符限制,也就是说每一个用户登录后执行的程序占用文件描述符的总数不能超过这个限制,那么像我们的web服务器,如果是使用降权用户进行启动的话,也要对该用户进行文件描述符的调整

  2. 系统级限制:sysctl命令和proc文件系统中查看到的数值是一样的,这属于系统级限制,它是限制所有用户打开文件描述符的总和

修改限制数量

  • 用户级
[root@localhost ~]# ulimit -n 10000
#临时修改,只对当前shell有效
-a:显示目前资源限制的设定;
-c <core文件上限>:设定core文件的最大值,单位为区块;
-d <数据节区大小>:程序数据节区的最大值,单位为KB;
-f <文件大小>:shell所能建立的最大文件,单位为区块;
-H:设定资源的硬性限制,也就是管理员所设下的限制;
-m <内存大小>:指定可使用内存的上限,单位为KB;
-n <文件数目>:指定同一时间最多可开启的文件数;
-p <缓冲区大小>:指定管道缓冲区的大小,单位512字节;
-s <堆叠大小>:指定堆叠的上限,单位为KB;
-S:设定资源的弹性限制;
-t <CPU时间>:指定CPU使用时间的上限,单位为秒;
-u <程序数目>:用户最多可开启的程序数目;
-v <虚拟内存大小>:指定可使用的虚拟内存上限,单位为KB。
vi /etc/security/limits.conf
* hard nofile 65536
* soft nofile 65536
#永久修改
  • 修改系统级限制
    通过sysctl命令修改/etc/sysctl.conf文件:sysctl -w fs.file-max=2048,完成后执行sysctl -p即可

参考文档

报错记录

[root@localhost ~]# dd if=/dev/zero of=./cc.txt bs=100M count=21
文件大小超出限制(吐核)

刚开始挺懵的,后来查阅资料了解了下

原因:人为操作失误,我使用ulimit 10000命令,结果是缺省会有-f选项,意思就是我设置这条命令之后再创建的单个文件最大不能超过10000个块的大小也就是40000K=40M。

解决:调整-f后的数量

转载于:https://www.cnblogs.com/joinbestgo/p/11184252.html


http://www.niftyadmin.cn/n/4819023.html

相关文章

SIP压力测试最好的工具

第一章SIPp介绍SIPp是一个测试SIP协议性能的工具软件。这是一个GPL的开放源码软件。 它包含了一些基本的SipStone用户代理工作流程&#xff08;UAC和UAS&#xff09;&#xff0c;并可使用INVITE和B YE建立和释放多个呼叫。它也可以读XML的场景文件&#xff0c;即描述任何性…

这段代码有什么问题吗? 关于IHTMLLinkElement的。

这段代码有什么问题吗&#xff1f; 关于IHTMLLinkElement的。楼主ttzzgg_80713&#xff08;身无立锥地&#xff0c;常有四海心---老子有条命&#xff09;2002-09-15 22:52:34 在 VC/MFC / HTML/XML 提问以下使用的是www.csdn.net/expert的网页. void CLeftView::GetA…

并发编程中关于死锁,递归锁,信号量的理解

并发编程中关于死锁,递归锁,信号量的理解 1.死锁**** ​ 所谓死锁&#xff1a; 是指两个或两个以上的进程或线程在执行过程中&#xff0c;因争夺资源而造成的一种互相等待的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推进下去。此时称系统处于死锁状态或系统产生了…

Ethereal使用入门

ethereal 可以用来从网络上抓包&#xff0c;并能对包进行分析。下面介绍windows 下面ethereal 的使用方法安装1&#xff09;安装winpcap&#xff0c;下载地址http://netgroup-serv.polito.it/winpcap/install/Default.htm 2&#xff09;安装ethereal &#xff0c;下载地址http:…

select top 的用法

select top 1 * from 员工 order by 编号 select * from 员工 order by 编号 select * from 员工 where 编号 like YG% order by 编号 desc select TOP 1 * from 员工 where 编号 like YG% order by 编号 desc

用Ethereal分析协议数据包

Ethereal是一个图形用户接口&#xff08;GUI&#xff09;的网络嗅探器&#xff0c;能够完成与Tcpdump相同的功能&#xff0c;但操作界面要友好很 多。Ehtereal和Tcpdump都依赖于pcap库&#xff08;libpcap&#xff09;&#xff0c;因此两者在许多方面非常相似&#xff08;如都使…

程序信息网格

程序信息网格 尽量在item信息中完成一切。

python第四课

# li[alex,[1,2,3],wusir,egon,女神,taibai]# l1li[0]# print(l1)# l2li[1]# print(l2)# l3li[0:3]# print(l3)#li[alex,wusir,egon,女神,taibai]#增加append insert# li.append(日天)# li.append(1)# print(li)# while 1:# usernameinput(>>>)# if username.…