首页 > 系统相关 >linux之文件最大打开数量

linux之文件最大打开数量

时间:2023-03-10 13:59:22浏览次数:63  
标签:文件 限制 ulimit 句柄 linux 进程 打开

谈打开文件数,不得不谈文件句柄

1.什么是文件句柄?

在文件I/O中,要从一个文件读取数据,应用程序首先要调用操作系统函数并传送文件名,并选一个到该文件的路径来打开文件。该函数取回一个顺序号,即文件句柄(file handle),该文件句柄对于打开的文件是唯一的识别依据。要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将文件句柄在内存中的地址和要拷贝的字节数传送给操作系统。

1.1 linux句柄

Linux中所有的事物或资源都是以文件的形式存在,比如消息、共享内存、连接等,句柄可以理解为指向这些文件的指针。
对于这些句柄,Linux是有数量限制的,单个进程默认可以打开的句柄数上限,可以用以下命令来查看:

$ ulimit -a

查看某个进程的句柄数上限,命令是:

$ ulimit -a PID

linux对能够打开的文件句柄的数量做了限制。限制是分为三个层面:

系统层面
用户层面
进程层面

如果某个进程打开的文件句柄超过限制,再打开文件就会报错。因此,在编程时,如果进程要占用大量文件句柄的话, 就要看看是否要调整最大可打开的文件句柄数,同时也要注意close释放掉不用的文件句柄。

2.句柄详解

2.1 系统层面

系统级的最大限制

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

用户层面的修改都是对一个进程打开的文件句柄数量的限制,我们还需要设置系统的总限制才可以。
假如,我们设置进程打开的文件句柄数是1024 ,但是系统总限制才500,所以所有进程最多能打开文件句柄数量500。从这里我们可以看出只设置进程的打开文件句柄的数量是不行的。所以需要修改系统的总限制才可以
系统级修改临时生效方式:

echo 655350 > /proc/sys/fs/file-max

系统级修改永久生效方式:

vi /etc/sysctl.conf

#系统允许打开最大文件数
fs.file-max=655350

#进程允许打开最大文件数,这里注意nr_open要比nofile大,否则会出现登录不上
fs.nr_open=60000

sysctl -p

查看是否生效,如果不行,reboot即可。

2.2 用户层面

用户级的最大限制

$ ulimit -n

用户级修改临时生效方法
重启后失效

ulimit -SHn 10000

ulimit 命令分软限制和硬限制,加-H就是硬限制,加-S就是软限制。默认显示的是软限制,如果运行ulimit 命令修改时没有加上-H或-S,就是两个参数一起改变。硬限制就是实际的限制,而软限制是警告限制,它只会给出警告
用户级修改永久有效方式

vi /etc/security/limits.conf

* soft nofile 65535
* hard nofile 65535

*表示所用的用户,但有的系统不认, 需要具体的用户名, 比如:

root soft nofile 65535
root hard nofile 65535

重新登录验证,或者reboot后验证。

2.3 进程层面

进程的最大打开文件数和当前打开文件数

$ cat /proc/[pid]/limits  显示当前进程的资源限制
$ cat /proc/[pid]/fd      是一个目录,包含进程打开文件的情况
$ cat /proc/[pid]/task    查看某个进程的线程的详细信息

标签:文件,限制,ulimit,句柄,linux,进程,打开
From: https://www.cnblogs.com/yangtao416/p/17203083.html

相关文章

  • flashfxp文件和文件名中文乱码怎么办?【转】
    flashfxp软件集成了其它好的FTP软件的优点,支持文件夹的传输,并且能够实时记录站点密码,便于管理,但是有的用户在使用过程中发现自己的flashfxp文件显示了中文乱码,那应该怎么办......
  • Linux安装JDK
    1下载下载相应版本的jdk 2上传到linux并解压缩tar-zxvfjdk-11_linux-x64_bin.tar.gz  3配置环境变量执行命令vi/etc/profile打......
  • Linux 上的开源视频字幕应用–Live Captions
    LiveCaptions是一个用于 Linux 桌面的应用程序,为视频提供即时、本地和开源的字幕。在一个完美的世界里,所有的视频都会有文字说明,直播视频也会有字幕。这不仅是......
  • powershell创建文件/文件夹
     powershell创建文件夹 powershell可以直接创建多层文件夹1.使用mkdir  mkdir"D:\a\b\c\d"如果文件夹已存在则报错  2.使用New-Item New-Item-PathD:......
  • JAVA WEB项目文件夹上传下载方法
    ​ 第一点:Java代码实现文件上传FormFilefile=manform.getFile();StringnewfileName= null;Stringnewpathname= null;StringfileAddre= "/numUp";try{......
  • 如何解决"代码依赖分析,可能会导致对应文件无法加载"的引用报错问题
    一、问题现象:uni-app开发小程序微信开发工具报:Error:xxx.js 已被代码依赖分析忽略,无法被其他模块引用。你可根据控制台中的【代码依赖分析】告警信息修改代码,或关闭......
  • Nginx http 文件服务器 中文名称文件乱码以及不能访问下载问题 (解决全过程)
    Nginxhttp文件服务器中文名称文件乱码以及不能访问下载问题(解决全过程)问题起因:首先是发现放在Nginx共享文件夹下的中文文件会出现乱码问题初步解决办法:......
  • bilibili文件缓存目录
    bilibili的视频缓冲文件夹目录如下:1、手机存储->Android2、->data3、->tv.danmaku.bili4、->download5、->进入相应的数字目录,目录下有audio.m4s和video.m4s文件分别是对应......
  • netcore 上传文件
    一般上传文件可以用formdata的文件格式将你要上传的文件和其他参数放在一个类里面例如:publicclassuploadItemFile{publicintid{get;set;}publicF......
  • 简单到复杂:C#拷贝文件的3种方法
        最近遇一个问题,一个程序调用另一个程序的文件,结果另一个程序的文件被占用,使用不了文件。这时候的解决方案就是把另一个程序的文件拷贝到当前程序就可以了。本文介......